Selenium ExpectedConditions参数

时间:2016-08-19 00:56:20

标签: selenium

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

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

所以我的问题是:

  1. 为什么不是所有方法都使用By,WebElement或两者兼而有之?
  2. 使用By over WebElement或其他方式有什么好处吗?
  3. 如果我使用页面对象模型,是否意味着我需要为页面上的同一元素维护By实例和WebElement实例?
  4. 来源:https://github.com/SeleniumHQ/selenium/blob/master/java/client/src/org/openqa/selenium/support/ui/ExpectedConditions.java

1 个答案:

答案 0 :(得分:0)

实际上它取决于要求

  • presenceOfElementLocated(final By locator)

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

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

  • visibilityOf(final WebElement element)

    期望检查已知存在于页面DOM上的元素是否可见。可见性意味着元素不仅会显示,而且高度和宽度也会大于0.

表示您拥有WebElement并且您已经知道DOM上存在此元素并且不会过时意味着由于更改页面而不会抛出StaleElementException在运行时,但您不知道元素是否可见,请通过传递ExpectedConditions来使用此WebElement

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

    可以看到并启用检查元素的期望,以便您可以单击它。

表示您拥有WebElement并且您已经知道DOM上存在此元素并且不会过时意味着由于更改页面而不会抛出StaleElementException在运行时,但您不知道元素是否可见,是否启用,然后使用elementToBeClickable(final WebElement element)

但有些时候由于ajax或其他原因,如果在检查elementToBeClickable(final WebElement element) ExpectedConditions期间页面会发生变化,那么由于StaleElementException而无法满足条件,因为在{{ 1}}条件selenium仅检查可见性,并在使用elementToBeClickable(final WebElement element) WebElement时查找已找到elementToBeClickable(final By locator)的条件selenium在检查元素可见之前查找元素并且能够克服因ExpectedConditions而失败。

因此,使用StaleElementException而不是By此处的好处是