我在 Selenium WebDriver 中进行测试时遇到问题。这Click
当程序尝试单击按钮时,事件并不总是有效。在一项测试中一切正常,而在其他测试中则不然。
每个测试都从一页开始。首先,用户必须从一个选项中选择一个select
组件,然后用户单击按钮。
我想知道为什么第一次一切正常,而当我第二次运行测试时却不然?
下面是查找并点击按钮的源代码:
public void clickContinueBtn() {
webElement = driver.findElement(By.xpath("//div[@class='btn magenta_s']/a/span"));
webElement.click();
}
我遇到了类似的问题。 click 方法在其他页面上有效,但在特定页面上根本不起作用。
竞争条件导致了该问题:
- HTML 内容在禁用按钮的情况下呈现。
- Selenium Web 驱动程序脚本在 javascript 之前执行onload http://www.w3schools.com/jsref/event_onload.asp事件被触发(或者执行完毕)。所以
button.click
将发生在禁用的元素上。什么也不会发生。
- 然后javascript onload事件就会触发(或完成执行)并且 JavaScript 将启用该按钮。
- 我查看了该页面,无法弄清楚为什么我的代码不起作用,因为该按钮在检查后似乎已启用,如果我手动单击该按钮,它就会起作用。
当我发现这是一个时间问题后,我在这里找到了解决方案:如何让 Selenium Web 驱动程序等待元素可访问,而不仅仅是存在? https://stackoverflow.com/questions/9161773/how-can-i-get-selenium-web-driver-to-wait-for-an-element-to-be-accessible-not-j
解释一下 Ruby 中的解决方案:
//This will not return the button until it is enabled.
button = driver.find_element(:xpath, "//button[@id='myButtonId' and not(@disabled)]")
button.click
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)