【问题标题】:how to make @FindAll annotation stop looking for object once the right one is found?一旦找到正确的对象,如何使@FindAll 注释停止寻找对象?
【发布时间】:2018-01-24 08:40:05
【问题描述】:

操作系统:Windows 10

硒版本:3.4

@FINDALL 注释应该至少匹配给定条件之一。

这里是 OR: 网页网址:http://store.demoqa.com/

网页元素:-

@FINDALL ({

@findby(xpath = "//input[@name='s']"),

@findby(xpath = "//a[contains(.,'Magic Mouse')]")

})
public WebElement Header__txtSearch;

我正在尝试使用多个定位器验证页面上的元素。

当我给出 2 个正确的 XPath 值时,驱动程序在网页上快速识别并正常返回。但是,当我将第一个作为 Correct 并将第二个作为 Incorrect 时,它仍然返回 true 找到元素,但它等待初始化驱动程序时提供的对象超时(隐式等待)。

有没有一种方法,如果它找到第一个元素,那么它会立即将我们返回为 true,而不是匹配下一个定位器,这样就不会再花费时间进行测试执行了。

找到正确的定位信息后如何停止??

或者是否有一个解决方法,我可以为一个元素使用多个定位器,以便驱动程序在它与一个定位器正确匹配时立即返回 true?

【问题讨论】:

  • 您需要将 WebElement 作为输出还是布尔值?
  • @Andersson 我需要 WebDriver 在匹配提供的任何一个定位器后立即将流返回到我的程序。

标签: java selenium xpath


【解决方案1】:

您是否尝试通过“|”将选择器合并为一个?喜欢:

@findby(xpath = "//input[@name='s']|//a[contains(.,'Magic Mouse')]")
public WebElement Header__txtSearch;

【讨论】:

  • 是的,我已经知道了,但是这个 xpath 只是一个例子。我想使用多个定位器。假设同一元素的 ID 和 XPath 这就是我尝试使用 @FindAll 注释的原因。但面临的问题是驱动程序在搜索所有定位器之前不会返回。它应该在找到一个定位器后立即返回程序。
【解决方案2】:

您可以在 中使用or 来获取第一个匹配的定位器。

@findby(xpath = "//input[@name='s'] or //a[contains(.,'Magic Mouse')]")
public WebElement Header__txtSearch;

【讨论】:

  • 是的,我已经知道了,但是这个 xpath 只是一个例子。我想使用多个定位器。假设同一元素的 ID 和 XPath 这就是我尝试使用 @FindAll 注释的原因。但面临的问题是驱动程序在搜索所有定位器之前不会返回。它应该在找到一个定位器后立即返回程序。
  • @samnit @FINDALL 将查找所有定位器。 or 条件将为您提供您想要的,它会在定位器上找到后立即返回。
  • 那么,有没有一种方法可以让我使用多个定位器,例如 ID、CSS、Xpath 等单个元素,一旦找到其中任何一个,它就会立即返回。
  • @samnit 您可以创建一个 XPath(或者最好是 CSS 选择器),其中包含所有各种方法来定位您想要使用的元素。
猜你喜欢
  • 1970-01-01
  • 2023-01-06
  • 1970-01-01
  • 1970-01-01
  • 2016-12-31
  • 1970-01-01
  • 2021-10-02
  • 2020-02-18
  • 2012-09-02
相关资源
最近更新 更多