Selenium/PageFactory:使用父元素的@FindBy查找子元素?

2023-12-10

我正在尝试将我的硒测试转换为使用页面对象模型(以及扩展的@FindBy)。我有几个像这样的对象定义:

public WebElement objectParent() {
    return driver.findElement(By.name("parent-id")) ;
}

public WebElement objectChild() {
    WebElement elem = objectParent();
    return elem.findElement(By.name("child-id")) ;
}

将父对象转换为使用@FindBy简单:

@FindBy(name = "parent-id")
WebElement parentObj;

基本上,如果可能的话,我想做这样的事情(我知道这不是真正的代码,这只是一个伪示例:

@FindBy(name = "parent-id")
WebElement parentObj;

@FindBy(parentObj.name = "child-id")
WebElement childObj;

但是有没有办法定位子元素within父元素使用@FindBy?。我需要这样做,因为我的目标是页面上的特定元素,这些元素可能与页面上的其他元素共享相同的名称或类名。谢谢!


如果不编写自定义内容,您想要做的事情是不容易实现的ElementLocatorFactory.

首先我真的推荐使用XPath。 这将使您很容易获得:
3rd <table>像这样:@FindBy(xpath = "\\table[3]") and...
2nd <li>在第三张表中就像这样:@FindBy(xpath = "\\table[3]\li[2]").

但如果你真的想用更短的时间来做@FindBy注释,你可以去ElementLocatorFactory.

public class FindByContextModifier implements ElementLocatorFactory {

    private final SearchContext context;

    public FindByContextModifier(final SearchContext context) {
        this.context = context;
    }

    public ElementLocator createLocator(final Field field) {
        return new DefaultElementLocator(context, field);
    }
}

带有将为您提供上下文的元素的类:

public class Parent {
    @FindBy(name = "myTable")
    WebElement table;

    public WebElement getTable() {
      return this.table;
    }
}

它的孩子:

public class Child {
    @FindBy(name = "particular")
    WebElement specialTableListElement;
}

Usage:

Parent parent = PageFactory.initElements(driver, Parent.class);
FindByContextModifier parentContext = new FindByContextModifier(parent.getTable());
Child child = new Child();
// This will look for the name "particular" inside the element with "myTable" name
PageFactory.initElements(parentContext, child);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium/PageFactory:使用父元素的@FindBy查找子元素? 的相关文章

  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 插入最大日期(独立于数据库)

    在我的本地设置中 我使用一个简单的 H2 数据库 托管 解决方案将有另一个 类似但不相同 数据库 我需要将最大可能日期插入到日期时间列中 我尝试使用 Instant MAX 但是 这会导致列中出现 169104626 12 11 20 08
  • 使用 JPA Criteria API 进行分页的总行数

    我正在系统中为实体实现 高级搜索 功能 以便用户可以使用该实体的属性上的多个条件 eq ne gt lt 等 来搜索该实体 我正在使用 JPA 的 Criteria API 动态生成 Criteria 查询 然后使用setFirstResu
  • Java AES 128 加密方式与 openssl 不同

    我们遇到了一种奇怪的情况 即我们在 Java 中使用的加密方法会向 openssl 生成不同的输出 尽管它们在配置上看起来相同 使用相同的键和 IV 文本 敏捷的棕色狐狸跳过了懒狗 加密为 Base64 字符串 openssl A8cMRI
  • JAVA - Xuggler - 组合 MP3 音频文件和 MP4 电影时播放视频

    使用 JAVA 和 Xuggler 以下代码组合 MP3 音频文件和 MP4 电影文件并输出组合的 mp4 文件 我希望在合并音频和视频文件时应自动播放输出视频文件 String inputVideoFilePath in mp4 Stri
  • 运行具有外部依赖项的 Scala 脚本

    我在 Users joe scala lib 下有以下 jar commons codec 1 4 jar httpclient 4 1 1 jar httpcore 4 1 jar commons logging 1 1 1 jar ht
  • 按第一列排序二维数组,然后按第二列排序

    int arrs 1 100 11 22 1 11 2 12 Arrays sort arrs a b gt a 0 b 0 上面的数组已排序为 1 100 1 11 2 12 11 22 我希望它们按以下方式排序a 0 b 0 首先 如果
  • 我需要什么库才能在 Java 中访问这个 com.sun.image.codec.jpeg?

    我正在用java创建一个图像水印程序 并导入了以下内容 import com sun image codec jpeg JPEGCodec import com sun image codec jpeg JPEGEncodeParam im
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • 如何模拟从抽象类继承的受保护子类方法?

    如何使用 Mockito 或 PowerMock 模拟由子类实现但从抽象超类继承的受保护方法 换句话说 我想在模拟 doSomethingElse 的同时测试 doSomething 方法 抽象超类 public abstract clas
  • 画透明圆,外面填充

    我有一个地图视图 我想在其上画一个圆圈以聚焦于给定区域 但我希望圆圈倒转 也就是说 圆的内部不是被填充 而是透明的 其他所有部分都被填充 请参阅这张图片了解我的意思 http i imgur com zxIMZ png 上半部分显示了我可以
  • hibernate锁等待超时超时;

    我正在使用 Hibernate 尝试模拟对数据库中同一行的 2 个并发更新 编辑 我将 em1 getTransaction commit 移至 em1 flush 之后我没有收到任何 StaleObjectException 两个事务已成
  • 具有 java XSLT 扩展的数组

    我正在尝试使用 java 在 XSLT 扩展中使用数组 我收到以下错误 Caused by java lang ClassCastException org apache xpath objects XObject cannot be ca
  • 将 SignedHash 插入 PDF 中以进行外部签名过程 -workingSample

    遵循电子书第 4 3 3 节 PDF 文档的数字签名 https jira nuxeo com secure attachment 49931 digitalsignatures20130304 pdf 我正在尝试创建一个工作示例 其中 客
  • 如何在JSTL中调​​用java方法? [复制]

    这个问题在这里已经有答案了 这可能是重复的问题 我只想调用不是 getter 或 setter 方法的方法例如 xyz 类的 makeCall someObj stringvalue Java类 Class XYZ public Strin
  • 将 Azure AD 高级自定义角色与 Spring Security 结合使用以进行基于角色的访问

    我创建了一个演示 Spring Boot 应用程序 我想在其中使用 AD 身份验证和授权 并使用 AD 和 Spring Security 查看 Azure 文档 我执行了以下操作 package com myapp contactdb c
  • Selenium Standalone Server 和 Java selenium Jar 文件有什么区别

    这可能听起来像个愚蠢的问题 但我想知道 Selenium 独立服务器和 Java selenium Jar 文件之间的区别 我可以使用这两个 jar 文件导入 Webdriver 类 如果 selenium 独立服务器提供了所有必需的 ja
  • Trie 数据结构 - Java [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有任何库或文档 链接提供了在 java 中实现 Trie 数据结构的更多信息 任何帮助都会很棒 Thanks 你可以阅读Java特里树
  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import

随机推荐

  • 使用WCF在两个winform应用程序之间通信?

    我有两个不同的winform应用程序 App1和app2 App1调用app2的exe 使用DOS命令窗口 并发送消息来启动app2 app2 开始执行 一旦完成任务 它就会向 app1 发送执行成功的消息 我如何使用 WCF 实现此功能
  • 在 PyQt GUI 中嵌入和更新 matplotlib 图形时出现内存泄漏

    我正在尝试将每秒更新一次的 matplotlib 图嵌入到 PyQt GUI 主窗口中 在我的程序中 我每秒调用一个更新函数threading Timer通过timer函数如下所示 我有一个问题 我的程序每秒都在变大 大约每 4 秒 1k
  • 子查询出现问题,字段不存在,但优点是给我结果

    我有一个关于优势子查询的问题 当我分析几个 SQL 查询时 我偶然发现了一个奇怪的情况 当我执行以下 SQL 时 得到以下结果 select from orderlyn where OLWArtnr in select OlwArtnr f
  • 在 C# 中执行批处理文件

    我正在尝试用 C 执行批处理文件 但没有成功 我在互联网上找到了多个这样做的例子 但它对我不起作用 public void ExecuteCommand string command int ExitCode ProcessStartInf
  • jQuery 覆盖 $.post 函数

    首先 我为我糟糕的英语道歉 希望有人能理解我的问题并帮助我 我正在开发一个使用大量 post 调用的项目 我想通过为所有调用添加相同的验证来改进它们 我不想一一更改所有脚本 那么有没有办法覆盖 post 函数以同时向所有脚本添加相同的内容
  • 如何在 Android 中使用选项卡小部件? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 谁能告诉我如何制作tab widget在安卓中 有一个开发人员指南展示了如何实现选项卡式活动 片段http developer android co
  • 用于浮点阈值操作的 SIMD

    我想让一些向量计算更快 并且我相信用于浮点比较和操作的 SIMD 指令可以有所帮助 操作如下 void func const double left const double right double res const size t si
  • Django 用不同的字段注释计数

    我有两个松散定义的模型 如下所示 class InformationUnit models Model username models CharField max length 255 project models ForeignKey P
  • 使用Python解析Gmail并将所有早于日期的内容标记为“已读”

    长话短说 我创建了一个新的 Gmail 帐户 并将其他几个帐户链接到它 每个帐户都有 1000 条消息 我正在导入这些帐户 所有导入的消息均以未读状态到达 但我需要它们显示为已读 我对 python 有一点经验 但我只使用 mail 和 i
  • 如何在#include 上将库名称放在头名称之前?

    我正在使用 cmake 编译具有以下结构的项目 Root LibA inc src LibB inc src main cpp 我在每个 LibX 每个 src 和 Root 文件夹上都有 CMakeLists 我的项目正在按预期编译和运行
  • 正则表达式匹配不包含所有指定元素的字符串

    我想找到一个正则表达式来匹配不包含所有指定元素的字符串 无论它们的顺序如何 例如 给定以下数据 one two three four one three two one two one three four 传递话语two three正则表
  • pip 抛出“TypeError: deprecated() ”错误

    我正在尝试安装一些软件包并开始出现错误 然后在ubuntu中使用多个命令更新一些东西 但错误是相似的 pip install U pip setuptools or python3 m pip install upgrade pip or
  • 来自现有文件的 NetBeans GUI 生成器

    我是 NetBeans IDE 的新手 我正在使用 NetBeans GUI 构建器来创建 GUI 我通过右键单击包并单击 新建 然后单击新的 JFrame 表单来创建一个新文件 它运行良好 但我有一个带有 JFrame 的 java 文件
  • 在 Django 模板中渲染外部定义的块

    我正在为 Django 编写一个简单的类似博客的应用程序 并试图获得首页帖子限制为 5 个的效果 并具有一次列出大约 100 个帖子的综合存档 100不现实 只是扔一个数字 由于博客文章块在两个页面之间看起来完全相同 减去显示的数量 因此我
  • django boto3:NoCredentialsError - 无法找到凭据

    我正在尝试使用boto3在我的 django 项目中将文件上传到 Amazon S3 凭证定义在settings py AWS ACCESS KEY xxxxxxxx AWS SECRET KEY xxxxxxxx S3 BUCKET xx
  • 如何在 VBA 中根据 A 列重复名称将整个行复制到其各自的工作表?

    我当前的代码将尝试使用 VBA 将基于列 A 重复名称的整行复制到其各自的工作表 如下所示 但它只适用于第一个重复的名称 而不适用于其余的名称 当我检查我的代码时 我意识到我的目标 在目标 Lbound到Ubound部分的部分 始终为0 所
  • 如何使用jquery或ajax以10秒的间隔刷新div

    任何帮助都值得这里的人们表示感谢 我正在用 php 构建一个 Web 应用程序 并且使用 Yii MVC 框架 它有很多内置工具 正如标题所说 我需要每10秒刷新一次div 目前我有这个ajax功能
  • 将数据标签添加到折线图[重复]

    这个问题在这里已经有答案了 我想使用 pandas matplotlib 在该图的圆圈顶部添加数据标签 使用 pandas 和 月份 作为索引从 Excel 文件加载数据 Importing the data Path xyz xlsx d
  • 如何对具有重置条件的列进行 SUM() ?

    我使用的是 Postgresql 9 2 我需要对按钮向上的数量进行求和 初始值为 100 但是如果我遇到名为 X 的行 我需要从该行中的 qty 值重新启动 SUM 例如 itemorder name qty 1 A 20 2 A2 35
  • Selenium/PageFactory:使用父元素的@FindBy查找子元素?

    我正在尝试将我的硒测试转换为使用页面对象模型 以及扩展的 FindBy 我有几个像这样的对象定义 public WebElement objectParent return driver findElement By name parent