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

Rip*_*sim 34 javascript java click button selenium-webdriver

我有以下HTML:

<button name="btnG" class="gbqfb" aria-label="Google Search" id="gbqfb"><span class="gbqfi"></span></button>
Run Code Online (Sandbox Code Playgroud)

我在下面的单击"Google搜索"按钮的代码在WebDriver中使用Java工作得很好.

driver.findElement(By.id("gbqfb")).click();
Run Code Online (Sandbox Code Playgroud)

我想在WebDriver中使用JavaScript来单击按钮.我该怎么做?

Jim*_*ans 89

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

// 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);
Run Code Online (Sandbox Code Playgroud)

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

  • 因为您在`executeScript`调用中将元素引用作为第0个参数传递. (4认同)
  • 我正在尝试在safari浏览器中对webElement执行单击操作,但无法完成此操作.代码能够跟踪元素,读取webelement的文本但不执行单击.也没有例外或错误.我该怎么办?上述解决方案也无效. (3认同)
  • 我可以知道为什么`arguments[0].click();`吗?你怎么知道它是索引0? (2认同)

Rip*_*sim 6

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

WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("document.getElementById('gbqfb').click();");
Run Code Online (Sandbox Code Playgroud)


dja*_*fan 6

我知道这不是 JavaScript,但您也可以实际使用鼠标单击来单击动态 Javascript 锚点:

public static void mouseClickByLocator( String cssLocator ) {
     String locator = cssLocator;
     WebElement el = driver.findElement( By.cssSelector( locator ) );
     Actions builder = new Actions(driver);
     builder.moveToElement( el ).click( el );
     builder.perform();
}
Run Code Online (Sandbox Code Playgroud)


小智 5

不确定 OP 的答案是否真的得到了回答。

var driver = new webdriver.Builder().usingServer('serverAddress').withCapabilities({'browserName': 'firefox'}).build();

driver.get('http://www.google.com');
driver.findElement(webdriver.By.id('gbqfb')).click();
Run Code Online (Sandbox Code Playgroud)