【问题标题】:How can we use RelativeLocator (not Relative xpath) in page factory (@FindBy)?我们如何在页面工厂(@FindBy)中使用RelativeLocator(不是Relative xpath)?
【发布时间】: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


【解决方案1】:

编写Relative Xpath如下 1)//{tagName}[contains(@class,'{className})] 如果你想验证 text 2)//{tagName}[contains(text(),'{text})]

我知道在您的情况下,您需要识别用户名、密码和 登录按钮并相应地执行操作

@FindBy(xpath = "//a[contains(text(),'Deals')]") WebElement dealLink;

dealsLink.click();

【讨论】:

  • 嗨 Mounika,这是 selenium 4 中引入的新定位器,我想在页面工厂中使用相对定位器(而不是相对 xpath),如何在页面工厂中使用以下代码 driver.findElement (RelativeLocator.withTagName("input").above(By.name("password")). below(By.xpath("//td//b[text()='sign-in here']")) );
  • 嗨 Mounika,请看视频链接,我刚刚在上面添加,如果您对页面工厂中的相对定位器使用有任何想法,请帮助我。
  • 你在引用什么吗?如果是这样,请确定您引用的内容。如果没有,请删除引用格式 > 并将您的代码格式化为代码。如果您需要帮助,请在编辑问题时查看右侧的指南。
  • 感谢@JeffC,我已经更正了我的代码格式,希望我能尽快得到帮助。
  • 嗨@SachinGupta。我实际上是在和这个答案的作者 Mounika 交谈。我知道您也会收到有关我评论的通知,但如果您查看评论的位置,您(通常)可以了解上下文。
猜你喜欢
  • 2015-10-14
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-21
相关资源
最近更新 更多