当前位置: 首页 > 知识库问答 >
问题:

在硒化物/硒中模板定位器的正确方法是什么?

靳彦
2023-03-14

我试图在UI测试中使用页面对象模式。许多示例假设在类字段中按(定位器)保存。其他人建议保存WebElement(或SelenideElement,如果您使用的是Selenide)。虽然这两种方法都适用于硬编码定位器,但我不知道如何将其用于路径包含变量的定位器。

例如,如何在类字段中保存此定位器?

public SelenideElement getTotal(String type) {
   return $(By.xpath("//h4[contains(text(), '"+ type +"')]");
}

共有2个答案

左丘修齐
2023-03-14

您实际上不需要将定位器保存到类字段。页面对象不必声明类字段中的所有元素。页面对象是一个对象,这意味着它必须提供方法来操作它。

因此,您的解决方案非常理想。:)

寿高阳
2023-03-14

在我看来,你的解决方案是正确的。

我通常会像您所做的那样将它们放在PageObject的顶部,靠近其他选择器。只需使用该方法,就像您使用SelenideElement字段之一一样。类似:

private SelenideElement getTotalElementByType(String type) {
    return $(By.xpath("//h4[contains(text(), '"+ type +"')]");
}

不过,我会将其设为私有受保护,因为使用Page Object Pattern,您的测试脚本不应该知道页面对象上的WebElements

您可以公开访问的方法如下:

public int getTotalByType(String type) {
    string totalString = getTotalElementByType(type).getText();
    int total = //convert to int or whatever
    return total;
}

如果您想与元素交互而不是获取值,您将返回您希望转到的PageObject以遵循POPattern。:)

 类似资料:
  • 对于所有的复选框和单选按钮,我创建了一个定位器生成器: 和定位器策略: 元素: 这工作完美,在我的硒IDE中是ee类似于radio =new_yes但是当我在收音机上单击时,我看到硒ide中有两个命令。一个命令带有定位器生成器,另一个命令带有属于复选框中标签的长 xpath 的命令。如何仅记录复选框中的输入字段?而不是标签?

  • 本文向大家介绍硒中的xpath是什么?,包括了硒中的xpath是什么?的使用技巧和注意事项,需要的朋友参考一下 Xpath是Selenium中用于识别Web元素的最重要的定位器之一。它以以下方式工作- 它借助元素及其属性(用于标识)在文档对象模型(DOM)中导航。 尽管它有助于唯一地定位元素,但从其他定位器来看,它的速度较慢。 xpath用两种方式表示,即“ /”和“ //”。正斜杠表示绝对路径。

  • 考虑以下简单类: 默认的模板化set方法对大多数T类型的值都很好,但我需要对特定类型的行为进行特殊化,将其称为String。 因此,在关联的CPP文件中,我添加了以下内容: 为什么在Xcode中工作而在Visual Studio中不工作 哪个编译器的行为正确,该问题应该被认为是另一个编译器中的bug吗? 顺便说一句,我尝试在头文件中创建一个显式签名: Xcode对此没有抱怨,一切都仍然有效。然而,

  • 问题内容: 在UML图上,代表模板类的正确方法是什么? 问题答案: 在右上角带有虚线矩形的普通矩形,代表模板参数。像这样:

  • 我是Selenium、TestNG和Selenium Grid的新手。我对何时需要使用Selenium Grid有点困惑。以下是我对此的理解。如果我是对的,请告诉我: Selenium Grid仅用于在另一台机器上远程运行您的测试 如果我需要在本地机器中并行运行我的测试,则无需使用Grid。这可以通过仅使用TestNG来实现 如果我需要在不同的远程机器上并行执行我的测试,那么我必须使用硒网格和Te

  • 问题内容: 我正在尝试以编程方式测试网站列表的加载时间。目的是大致模拟用户将感知的页面加载时间。 我的第一种方法是在循环内调用以下代码: 问题是有时我会在页面真正加载之前得到时间结果(即我获得50ms次),因此我猜想控件在完成之前会移交给下一条指令。 我应该怎么做才能改善这项测试? 编辑: 正如user1258245所建议的那样,我可以等待元素加载,但是问题是我不知道哪些页面需要预先加载。 问题答