请考虑来自internal Selenium test page的以下<select>
:
<select id="invisi_select" style="opacity:0;">
<option selected value="apples">Apples</option>
<option value="oranges">Oranges</option>
</select>
它用于模拟id
建议的不可见元素,方法是将opacity
设置为0。
尽管该元素不可见,但用户实际上可以与其交互。如果我在浏览器中打开页面并单击元素的位置,则会打开选择菜单。我相信这也是WebElement#isDisplayed()
返回此元素true
的原因,这也是这些旧的Selenium问题所建议的:
- https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/1610
- https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/1941
要执行诸如点击之类的操作,我们出于多种原因最近切换到了Java interactions API,例如,切换到了prevent ElementClickInterceptedException
s。 (请注意,这并不是重构一堆Selenium测试,这是在Selenium API之上运行的通用操作执行程序的背景下发生的。)但是,如果我执行以下操作:
WebElement applesOption = /* get apples option */
new actions(webDriver).moveToElement(applesOption)
.click()
.perform();
移动到元素会引发以下异常:
org.openqa.selenium.JavascriptException: javascript error: Failed to execute 'elementsFromPoint' on 'Document': The provided double value is non-finite.
我猜这是因为elementsFromPoint()
通过WebDriver Actions API似乎为这样的透明元素返回了“非有限”双精度值?
使用actions
时是否可以防止这种情况发生?也许,除了检查元素是否可点击(ExpectedConditions#elementToBeclickable(...)
)之外,我还必须解析{听起来很恐怖的”属性,例如opacity
?