如何使用JavaScript单击Selenium WebDriver中的元素?

我有以下HTML:

<button name="btnG" class="gbqfb" aria-label="Google Search" id="gbqfb"><span class="gbqfi"></span></button>

我点击“Google搜索”按钮的以下代码在WebDriver中使用Java运行良好。

driver.findElement(By.id("gbqfb")).click();

我想将JavaScript与WebDriver一起使用以单击该按钮。我该怎么做?


答案 1

通过 JavaScript 执行单击有一些您应该注意的行为。例如,如果绑定到元素事件的代码调用 ,您可能会发现 Selenium 代码挂起,具体取决于浏览器驱动程序的实现。也就是说,您可以使用该类来执行此操作。但是,我的解决方案与建议的其他解决方案不同,因为您仍然可以使用WebDriver方法来查找元素。onclickwindow.alert()JavascriptExecutor

// Assume driver is a valid WebDriver instance that
// has been properly instantiated elsewhere.
WebElement element = driver.findElement(By.id("gbqfd"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element);

您还应该注意,最好使用接口的方法,但在实例化驱动程序之前禁用本机事件。这将实现相同的目标(具有相同的潜在限制),但不会强迫您编写和维护自己的JavaScript。click()WebElement


答案 2

以下是使用JavaScript单击WebDriver中的按钮的代码:

WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("document.getElementById('gbqfb').click();");