gpt4 book ai didi

Selenium ExpectedConditions 参数

转载 作者:行者123 更新时间:2023-12-02 04:39:05 24 4
gpt4 key购买 nike

在编写 Selenium 测试时,我注意到在 ExpectedConditions 类中,有些方法仅使用 By 作为参数,有些方法仅使用 WebElement 作为参数,并且一些方法具有支持这两个参数的重载方法。

  • presenceOfElementLocated(最终定位器)
  • visibilityOf(最终 WebElement 元素)
  • elementToBeClickable(最终通过定位器)
  • elementToBeClickable(最终 WebElement 元素)

所以我的问题是:

  1. 为什么不是所有方法都使用 By、WebElement 或两者都使用?
  2. 使用 By 而不是 WebElement 或其他方式有什么好处吗?
  3. 如果我使用页面对象模型,是否意味着我需要为页面上的同一元素维护 By 实例和 WebElement 实例?

来源:https://github.com/SeleniumHQ/selenium/blob/master/java/client/src/org/openqa/selenium/support/ui/ExpectedConditions.java

最佳答案

其实这取决于需求

  • presenceOfElementLocated(最终通过定位器):

    期望检查元素是否存在于页面的 DOM 中。这并不一定意味着该元素是可见的。

在这里您只能使用 By 定位器,因为如果您已经找到 WebElement 则通过传递使用此 ExpectedConditions 没有任何意义WebElement.

  • visibilityOf(最终 WebElement 元素):

    期望检查已知存在于页面 DOM 上的元素是否可见。可见性是指元素不仅被显示,而且高度和宽度都大于0。

意味着如果你有 WebElement 并且你已经知道这个元素存在于 DOM 并且不会过时意味着这不会抛出 StaleElementException 由于页面在运行时发生变化,但您不知道元素是否可见,然后通过传递 WebElement 使用此 ExpectedConditions

  • elementToBeClickable(final By locator)elementToBeClickable(final WebElement element):

    检查元素是否可见并启用以便您可以单击它的期望。

意味着如果你有 WebElement 并且你已经知道这个元素存在于 DOM 并且不会过时意味着这不会抛出 StaleElementException 由于页面在运行时发生变化,但您不知道元素是否可见以及是否启用,然后使用 elementToBeClickable(final WebElement element)

但有时由于 ajax 或其他原因,如果在检查 elementToBeClickable(final WebElement element) ExpectedConditions 期间页面会发生变化,则由于以下原因,它无法满足条件StaleElementException 因为在 elementToBeClickable(最终 WebElement 元素) 条件中,selenium 仅在使用 elementToBeClickable( final By locator) ExpectedConditions selenium 在检查元素是否可见之前去查找元素,并启用以克服由于 StaleElementException 导致的失败机会。

这就是在这里使用 By 而不是 WebElement 的好处。

关于Selenium ExpectedConditions 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39029601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com