【发布时间】:2020-02-26 09:37:29
【问题描述】:
我们如何在页面工厂(@FindBy)中使用RelativeLocator,请帮助我在页面工厂中使用以下代码
driver.findElement(RelativeLocator.withTagName("input").above(By.name("password")).below(By.xpath("//td//b[text()='sign-in here']")));
实际上我想在页面工厂中使用与下面相同的上述代码(RelativeLocator),这是selenium社区提供的新功能,但我不知道如何使用此页面工厂。
@FindBy(name="uid")
WebElement userName;
我知道这是正常使用,请参阅Relative Locator Video 供您参考。
【问题讨论】:
-
发布您尝试定位的元素的相关 HTML。很可能我们可以创建一个可以找到它的定位器。
-
@JeffC 真的很抱歉,我听不懂,我想在页面工厂中使用下面的代码(@FindBy (.....)),我该如何使用它驱动程序.findElement(RelativeLocator.withTagName("input").above(By.name("password")). below(By.xpath("//td//b[text()='sign-in here']" )));
-
我不知道,但如果我猜的话,PageFactory 尚未(也可能不会)更新以利用新的定位器类型。 PageFactory 是很久以前编写的,作为如何扩展 Selenium 的示例,但并不打算用于实际使用。 Selenium 贡献者(特别是主要贡献者 Simon Stewart)在会议演讲等期间多次声明不应使用它。
-
谢谢@JeffC,你是绝对正确的,我也从 selenium 社区得到了答案,这里是澄清:-“相对定位器本质上是动态的。它们通过空间描述元素与其他元素的关系。Java 注释只允许使用可以在编译阶段评估的静态表达式。因此,在 PageFactory 的当前实现中不可能使用相对定位器。"
标签: java selenium selenium-webdriver automation appium