硒:如何单击JavaScript按钮

时间:2018-09-19 12:03:46

标签: javascript java selenium selenium-webdriver webdriver

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

我在Java中用Selenium Web Driver和Junit编写了一个小脚本。脚本打开IE窗口,输入登录名和密码。我在单击“登录”按钮时遇到问题。

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

我尝试使用moveByOffset鼠标并按按钮(在用密码填充字符串后,类Robot-'tab'和'enter')单击。它们都不起作用。

接下来,我找到了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); 

我在测试方面经验不足,因此,感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

请勿使用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/包含硒的信息(等)

答案 1 :(得分:3)

根据您共享的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();