【问题标题】:How can I get Selenium WebDriver (Java) to click this button?如何让 Selenium WebDriver (Java) 单击此按钮?
【发布时间】:2018-01-12 18:52:34
【问题描述】:

我是使用 Selenium WebDriver 自动化测试用例的新手。到目前为止(使用 Selenium 和 Java),我能够打开测试网站,输入用户名和密码,然后登录。但是,登录后,用户被重定向到一个带有安全警告的屏幕,必须是在他们可以访问实际网站之前接受。为此,他们必须点击一个名为“我同意”的按钮。我无法让 Selenium 单击按钮,没有它,我无法访问站点的其余部分以实现自动化。这是按钮的 HTML:

<form name="landingHandlerSF" method="post" action="/apps/bap/secLandingHandler.do">
<input name="userAgreedTerms" value="" type="hidden">
<input name="submit" value="landing" type="hidden">
<input name="buttonAction" value="I Agree" onclick="setValue('agreetoTerms', 'Y')" type="submit">
</form>

这是我尝试过的代码(不起作用):

WebElement button = driver.findElement(By.name("buttonAction"));
button.click();

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 错误是什么?这将有助于更好地调试它。
  • 你能详细说明一下到底发生了什么吗? doesn't work 是什么意思?使用错误堆栈跟踪更新问题。
  • Pradeep 的回答是问题所在,但感谢您的帮助 :)

标签: java selenium selenium-webdriver


【解决方案1】:

据我了解,页面正在重定向到新的 html 页面,但驱动程序将指向父页面(在您的情况下为登录页面),因此您可能必须切换到 child window 才能单击 我同意按钮。

以下代码会将驱动程序从当前窗口(即登录窗口)切换到新窗口(即安全警告)。点击后我同意安全警告会关闭,驱动会自动切换回来

String thisWindow = driver.getWindowHandle();
Set<String> windowHandles = driver.getWindowHandles();
for (String windowHandle : windowHandles) {
    if (!windowHandle.contains(thisWindow)) {
        driver.switchTo().window(windowHandle);
    }
}

如果它没有导航到新页面,那么它必须在某个 iframes 下,在这种情况下,您可能需要切换到框架并单击按钮。

希望这会奏效。 试试这个,让我知道发生了什么。

【讨论】:

    【解决方案2】:

    您是否尝试将 JavaScript 代码注入浏览器?

    driver.executeScript("setValue('agreetoTerms', 'Y')");
    

    driver.executeScript("document.getElementsByName('buttonAction')[0].click()");
    

    【讨论】:

    • Pradeep 的回答是问题所在,但感谢您的帮助 :)
    猜你喜欢
    • 2020-02-24
    • 2019-12-14
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 2021-09-03
    相关资源
    最近更新 更多