Selenium:如何点击javascript按钮

Posted

技术标签:

【中文标题】Selenium:如何点击javascript按钮【英文标题】:Selenium: how to click on javascript button 【发布时间】:2019-02-23 14:30:33 【问题描述】:

我必须编写一些用于自动测试的脚本,以检查使用 flex/amf 技术构建的 Web 应用程序的加载时间。 测试将包括打开 IE 浏览器、浏览多个选项卡并测量从单击最后一个选项卡到加载页面内容然后关闭浏览器的时间。

我用 Java 编写了一个带有 Selenium Web Driver 和 Junit 的小脚本。脚本打开 IE 窗口,输入登录名和密码。我对“单击”登录按钮有疑问。

首先,我尝试通过 findElement 和 By.partiallinktext 查找并单击按钮,但 selenium 告诉我:“无法找到带有部分链接文本的元素”(ctrl+f 在该站点上工作正常)。

我尝试使用 moveByOffset 鼠标单击并按下按钮(机器人类 - 使用密码填充字符串后的“选项卡”和“输入”)。所有这些都不起作用。

接下来我找到了 javascriptExecutor - 我想,它可以解决我的问题,但我应该如何使用这个类?

该网站上的按钮:

<button style="width: 120px;" onclick="javascript:logIn();"> Login </button>

我的java代码:

WebElement button = driver.findElement(By.partialLinkText("Login")); 
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript ("document.getElementByText(\"Login\")).click();", button); 

我没有太多的测试经验,所以我会感谢你的帮助。

【问题讨论】:

【参考方案1】:

不要通过 JavaScript。试试这个:

String xPath = "//button[contains(.,'Login')]";
driver.findElement(By.xpath(xPath))).click();

更好,但尚未测试:

// xPath to find a button whose text() (ie title) contains the word Login
String xPath = "//button[contains(text(),'Login')]";
driver.findElement(By.xpath(xPath))).click();

另请注意https://sqa.stackexchange.com/ 有关于 Selenium(等)的信息

【讨论】:

【参考方案2】:

根据您共享的 html 以在所需元素上调用 click(),您可以使用以下解决方案:

driver.findElement(By.xpath("//button[normalize-space()='Login']")).click();

从另一个角度来看,所需元素看起来 JavaScript 已启用,在这种情况下,您必须诱导 WebDriverWait 以使 元素可点击,您可以使用以下解决方案:

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//button[normalize-space()='Login']"))).click();

【讨论】:

以上是关于Selenium:如何点击javascript按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Selenium python 点击​​按钮

如何使用 selenium webdriver 检查按钮是不是可点击

如何在 selenium python 中使用 javascript 执行程序代码发送 ENTER/RETURN 键?

如何在 perl $sel->click 下使用 Selenium 点击 Javascript

怎样用 Javascript 模拟点击按钮执行搜索?

Selenium2 点击按钮跳转页面,如何判断页面是不是加载完成(包含跳到对应页面有ajax的访问)