WebDriver / 将元素读入变量并重新使用它们

2023-12-20

我有一个大问题Webdriver(硒2)。

在我的测试代码中,我找到测试开始时的所有元素,并对它们执行一些操作(例如click()、检查属性等)。我的问题是我的页面刷新并重新加载我的元素,而 Webdriver 不知道再次识别这些元素。

我知道我可以再次找到我的元素,但在某些函数中我不知道我的 XPath/ids,并且我只得到 WebElements,而不是 XPath/ID。

我说的对吗?不可能将元素读入变量并重新使用它们?


WebElement element = driver.findElement(By.id("xyz"));

上面的行将把元素对象存储在element多变的。您当然可以将此元素传递给其他函数以在那里使用它。

我们一般遵循页面对象设计模式 https://www.selenium.dev/documentation/test_practices/encouraged/page_object_models/我们将页面的所有对象创建为类的成员并立即实例化它们。这样我们就可以在项目中的任何地方使用它们。例如,登录页面中的所有对象都将在名为的类中创建为公共静态变量LoginPage。的构造函数LoginPage类将查找元素并存储它们。

下次你想在任何地方访问某个对象时LoginPage,我们按如下方式访问它们(假设您已经创建了元素userName and submit)...

LoginPage.userName.sendKeys("buddha");
LoginPage.submit.click();

然而,正如 Robbie 提到的,在页面刷新后,使用先前创建的对象有可能无法访问这些对象。您可以使用以下修改后的方法来确保始终找到这些对象。

而不是将对象创建为成员变量, 创建一个获取方法对于您可能需要使用的每个对象。

class LoginPage
{
    public static WebElement getUserName()
    {
         return driver.findElement(By.id("xyz"));
    }
}

Once LoginPage就是这样定义的,下次你想使用的时候userName,您可以使用以下语法。这样您就不必为需要使用这些对象的函数提供定位器。

LoginPage.getUserName().sendKeys("buddha");

通过使用这种方法,您可以确保对象始终可访问。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebDriver / 将元素读入变量并重新使用它们 的相关文章

随机推荐

  • WPF 重复元素

    我有一个 UserControl 它是一个按钮 具有某些特征 并且我有一个窗口 其中有几个 正常 样式的按钮 在同一个窗口上 我定义了一种样式来覆盖一些正常特征 并且我想要其中的一些 有点像键盘布局 我拥有的是一个包含 30 行的 Unif
  • Django 查询非常慢

    我的 Django 应用程序有问题 模型查询Scope速度非常慢 经过一些调试后我仍然不知道问题出在哪里 当我像这样查询数据库时scope Scope objects get pk Esoterik I 需要 5 到 10 秒 数据库只有不
  • openstack 网络无法从虚拟机 ping/ssh 到虚拟机

    我已经使用 devstack 脚本安装了多节点 openstak 可以运行虚拟机 但存在网络问题 无法从一个虚拟机 ssh ping 到另一虚拟机 我只能从运行该虚拟机的主机 control1 computeX 通过 ssh 连接到虚拟机
  • 动态修改 Tapestry 5 中的 FormInjector 上下文信息

    我当前的问题是关于动态更新上下文信息FormInjector 我之前的问题在 Tapestry 5 中更新表单内的区域 https stackoverflow com questions 2966750 updating a zone in
  • 使用 jFreeChart 在多个图形中绘制多个图形

    我正在尝试使用 jFreechart 生成两个数字 每个数字有 12 个图表 在 jFreeChart 中称为系列 然而 有些图表被简单地跳过了 我知道我在这里遇到同步问题 并尝试使用用户 trashgod 提供给我的方法here http
  • Python json.dumps() 输出缩小的json?

    有没有办法让python的json dumps
  • 如何在 Azure AD B2C 中停用和重新激活用户

    有什么方法可以停用并重新激活 Azure AD B2C 用户 我想实现切换 Azure AD 用户状态的功能 如果 停用并重新激活 是指阻止用户登录 目前 这仅适用于本地帐户 不适用于来自社交提供商的帐户 Facebook Google 等
  • 如何设置SWFUpload上传的文件夹?

    我在文档中没有看到如何使用 SWFUpload 设置上传的文件文件夹 有人能指出我正确的方向吗 如果有帮助的话我正在使用 PHP 5 您所做的就是调用 PHP 脚本 该脚本会处理文件上传 您可以打开调试 这将为您提供一个非常好的调试视图 了
  • gridview 中的分页

    我的网格视图
  • 动态缩略图/调整图像大小生成[重复]

    这个问题在这里已经有答案了 可能的重复 PHP 动态调整图像大小与存储调整大小的图像 https stackoverflow com questions 2823600 php image resize on the fly vs stor
  • 未找到 glib.h 和 gtk.h

    大家好 我有一个程序 其中包括 gtk gtk h glib h 我使用过以下命令 sudo apt get install libgtk2 0 dev glib sudo apt get install glade 但我仍然收到 glib
  • 本机 xml 数据库中的唯一性插入

    我正在开发一个基于XML 的项目 我使用 Sedna 数据库来存储我的集合 其中包含 XML 文件及其 XSD 架构文件 我在这些方案中定义了主键 唯一键 但到目前为止我可以将重复值 通过 XQuery 更新插入命令 插入到主键字段中 为了
  • 内存泄漏和处置

    我可能不理解这个概念或者我做错了什么 我对 NET 中的内存管理有一些疑问 想象一下情况 Form1是大人窗体 作为 MDI 父级和一点FormChild 被绑定为子项 public partial class Form1 Form pub
  • 如何使用 @output 将布尔值从子级发送到父级

    嗨 有角的社区 我想使用 Output 触发一个事件来隐藏或打开 关闭包含其他组件的 div 这很简单 但我以前从未使用过 EventEmitter 所以我希望当调用 hideDem 时 它会根据来自 child ts 的其他属性隐藏或打开
  • 如何增加android中线性布局中元素之间的空间? [复制]

    这个问题在这里已经有答案了 在我的应用程序中 我使用了 Linearlayout 其中有 3 个 EditText 元素 现在我想增加 Edittext 元素之间的空间 填充 是否可以 基本上这是相对于你的边框而言的 如果你想在边框内的元素
  • 使用该 exe 的 VM 参数在 Maven 中创建一个 exe 文件

    我目前正在开发一个 Java 项目 该项目需要指定 java library path 的 VM 参数 当从 Eclipse 中运行我的程序时 没问题 我可以轻松指定我的 VM 参数 现在我想通过 Maven 构建我的项目 但还没有找到向该
  • 如何将二进制字符串写入文件 C#

    我有一个二进制数字符串 例如 temp 0101110011 我想将其另存为文件 该 Temp 有 10 个字符 如何将此字符串保存到 10 位长度的文件中 void Save Data string temp bool BoolArray
  • 使用 NSXMLParserDelegate 构建项目时出错

    TurbineXMLParser h import
  • VBA - 文件夹选择器 - 设置从哪里开始[重复]

    这个问题在这里已经有答案了 我有一个小型 Access VBA 应用程序 需要用户选择一个文件夹 我想知道是否有办法告诉 VBA 启动文件夹选择器的路径 即启动文件夹选择器C data forms 目前看来是从以前使用的目录开始的 还有一种
  • WebDriver / 将元素读入变量并重新使用它们

    我有一个大问题Webdriver 硒2 在我的测试代码中 我找到测试开始时的所有元素 并对它们执行一些操作 例如click 检查属性等 我的问题是我的页面刷新并重新加载我的元素 而 Webdriver 不知道再次识别这些元素 我知道我可以再