java - Selenium WebElement.click() 与 Javascript 点击事件

标签 java javascript selenium selenium-webdriver

我想知道调用 WebElementclick() 方法有什么区别?与通过 id 查找元素并使用 JavaScript 触发 click 事件相比。

为了清楚起见,我在第一个方法中调用了 WebElement 实例的 .click() :

myWebElement.click();

第二种技术是:

((JavascriptExecutor)driver).executeScript("document.getElementById('myElementID').click()");

我很想知道这两种点击网络元素的技术之间的所有区别,以及每种技术的优缺点。

最佳答案

Webdriver 利用浏览器的 native 支持,使用 id/xpath 等将 DOM 元素映射到 WebElement 对象。

JavascriptExecutor.executeScript 在当前选定的浏览器窗口的上下文中执行一个外部 脚本。 (类似于增强浏览工具,如 grease monkey,如果您曾经使用过), 如果脚本返回任何 DOM 元素,则将其转换为 WebElement 对象。

也可以说,与使用 javascript 调用的点击相比,WebDriver 在浏览器上模拟的点击与实际用户所做的类似。

实际上,使用 WebDriver 并非所有事件都可以在所有 Web 浏览器中完美地自动化,事实上,对于同一 Web 浏览器的不同版本也是如此。 (即不同版本的 IE、FF 等行为不同)。 WebDriver 仍然是最接近最佳的工具

有一次(大约 4 年前)在某个版本的 IE 上我们观察到我们无法发送右键单击或者可能将鼠标悬停在生成的菜单链接上,所以我们使用 js 来模拟它,它在很大程度上独立于浏览器方法。所以您现在可以得出执行外部 javascript 的好处。

此外,还有一些自动网络测试框架使用 javascript 代替浏览器的 native 支持。例如: http://en.wikipedia.org/wiki/Sahi_%28software%29

引用:

关于java - Selenium WebElement.click() 与 Javascript 点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24571048/

相关文章:

javascript - 使用javascript将数组数据发送到另一个页面?

java - 在泛型类中将字符串转换为数字

java - 将 FileWriter 作为参数传递给方法

java.lang.ExceptionInInitializerError Spring创建Application Context时抛出的异常

javascript - 为什么最后一个字符不断重复打印?

javascript - 使用 jquery 将 "onClick"事件添加到动态 div

python - 将 selenium 与 python beautifulsoup 库一起使用时出现回溯错误

ruby - Selenium Ruby 绑定(bind)功能文档

java - Selenium Webdriver - PageObject 和驱动程序指针

java - 尝试在 Spring Controller 中使用 BindingResult 时出现 ConstraintViolationException