我们可以使用以下方法单击web元素。
myWebElement.click();
或
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();", myWebElement);
或
Actions(driver).click(myWebElement).build().perform();
这些方法有什么不同?
答案 0 :(得分:16)
myWebElement.click();
操作(驱动程序)。单击(myWebElement).build()执行();
click方法和actions类都属于webdriver.Action类用于模拟复杂的用户手势(包括拖放操作或使用Control键等单击多个元素等).click方法用于单击相应的webElement (按钮,链接等).Selenium Webdriver使用浏览器的本机支持,使用id / xpath等定位器将DOM元素映射到WebElement对象。
JavaScriptExecutor是一个提供通过selenium驱动程序执行Javascript的机制的接口。它提供了“executioncript”& " executeAsyncScript"方法,在当前选定的框架或窗口的上下文中运行外部JavaScript。在executioncript的情况下,它将返回一个DOM元素,然后转换为WebElement
WebDriver在浏览器上模拟的点击类似于实际用户与使用javascript调用的点击相比
示例方案:
<html>
<body>
<button type = "button" id ="test" style = "display:none"> clickme </button>
</body>
</html>
如果你点击&#34;点击我&#34;使用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
希望这会对你有所帮助。如果你有任何疑问,请回复