【问题标题】:What is the difference between Selenium WebDriver "Click" and JavascriptExecutor ClickSelenium WebDriver "Click" 和 JavascriptExecutor Click 有什么区别
【发布时间】:2017-04-13 13:09:34
【问题描述】:

以下两个语句的执行过程区别。

  1. driver.findElement(By.xpath("//input[@value='Save']")).click();
  2. ((JavascriptExecutor) driver).executeScript("arguments[0].click();", element);

【问题讨论】:

    标签: java selenium selenium-webdriver


    【解决方案1】:

    WebDriver click() 模拟真实用户与 UI 的交互。我将通过向浏览器发送本机事件来执行(在大多数浏览器中),并且它必须可见才能单击它。来自docs

    ...如果 click() 是通过发送原生事件(即 大多数浏览器/平台上的默认设置)

    点击元素有一些先决条件。元素 必须是可见的,并且高度和宽度必须大于 0。

    另一方面,JavaScriptclick()

    在当前选定框架的上下文中执行 JavaScript 或 窗口。

    无论WebElement 是否可见。这种方法错过了Selenium试图模拟用户交互的想法。

    【讨论】:

      【解决方案2】:

      简单来说。 Webdriver 使用 native 浏览器事件来点击元素,而 javascript 使用 JavaScrip 来点击元素。

      如果我没记错 Selenium 1,它的所有操作都使用 JavaScript,但他们在 webdriver (Selenium 2) 中改变了这一点,现在他们使用本机浏览器事件与浏览器交互。因此,您需要浏览器的相应支持(geckodriver、IEDriver、Chromedriver 等)。另一方面,JavaScript 引擎内置在所有主要浏览器中,因此您不需要这些额外的可执行文件。

      【讨论】: