myWebElement.click();
Actions(driver).click(myWebElement).build().perform();
click方法和actions类均属于webdriver.Action类,用于模拟复杂用户手势(包括拖放或使用控制键点击多个元素等)。 click方法用于单击相应的webElement(按钮、链接等)。Selenium Webdriver使用浏览器本地支持将DOM元素映射到WebElement对象中,使用类似id/xpath等定位方式。
JavaScriptExecutor是一个接口,它通过selenium driver提供了执行Javascript的机制。它提供了“executescript”和“executeAsyncScript”方法,以在当前选定的框架或窗口上下文中运行外部JavaScript。在执行脚本时,它将返回一个DOM元素,然后将其转换为WebElement。
WebDriver在浏览器上模拟的单击与实际用户执行的操作类似,而不同于使用javascript调用的单击。
示例场景:
<html>
<body>
<button type = "button" id ="test" style = "display:none"> clickme </button>
</body>
</html>
如果您在Webdriver中使用“click”函数单击“点击我”按钮,您将收到一个org.openqa.selenium.ElementNotVisibleException(元素不可见异常),这是正确的,因为该元素存在于DOM中但未显示给用户,因为设置了CSS样式"display:none"。
((JavascriptExecutor)driver).executeScript("$('#test').click();");//or
((JavascriptExecutor)driver).executeScript("document.getElementById('test').click();");
如果您使用上述JavaScript / jQuery来单击元素,则无论按钮是否可见,它都会单击该按钮,这是错误的,因为最终用户将无法看到/单击该按钮,但您的脚本将通过。因此,教训是尽可能使用WebDriver功能,而不是使用JavaScript。
希望这可以帮助您。如有任何疑问,请随时与我们联系。