使用JavaScript、Actions和WebDriver点击元素有什么区别?

13
我们可以使用以下方法点击网页元素。
myWebElement.click();
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();", myWebElement);
Actions(driver).click(myWebElement).build().perform();

这些方法有什么区别?

1个回答

20

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。

希望这可以帮助您。如有任何疑问,请随时与我们联系。


1
感谢 Vicky 的澄清。 - Ragunath Chilkuru
维琪,你的回答很好! - Saurav Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接