使用javascript vs actions vs webdriver单击元素?

时间:2015-08-17 07:50:13

标签: javascript selenium selenium-webdriver

我们可以使用以下方法单击web元素。

myWebElement.click();

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();", myWebElement);

Actions(driver).click(myWebElement).build().perform();

这些方法有什么不同?

1 个答案:

答案 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

希望这会对你有所帮助。如果你有任何疑问,请回复