在编写Selenium测试时,我注意到在ExpectedConditions
类中,一些方法仅使用By
作为参数,一些方法仅使用WebElement
作为参数,而一些方法具有重载的方法支持两个参数。
所以我的问题是:
答案 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
此处的好处是