【问题标题】:Selenium WebDriver with Java: Can't accept alert带有 Java 的 Selenium WebDriver:无法接受警报
【发布时间】:2012-10-15 10:11:54
【问题描述】:

在 selenium IDE 中录制时,我可以在弹出窗口中单击“确定”按钮,并希望能够使用它来单击它

driver.findElement(By.linkText("OK")).click();

但事实并非如此。

同样,这不起作用。

driver.switchTo().alert().accept();

Selenium 抛出 NoAlertPresent 异常。如果弹出的不是警报,那是什么?以及如何点击是!

【问题讨论】:

  • 这是一个实际的 Javascript 确认吗?如果不是,那么您通过执行.alert() 调用的IAlert 接口将无济于事。
  • 因为不是Alert所以不需要这行代码:driver.switchTo().alert().accept();

标签: java selenium-webdriver selenium-ide


【解决方案1】:

在这种情况下,我更愿意检查(验证)页面上的警报是否存在,然后如果存在 - 接受它。 有点像:

public boolean isAlertPresent() {

  boolean presentFlag = false;

  try {

   // Check the presence of alert
   Alert alert = driver.switchTo().alert();
   // Alert present; set the flag
   presentFlag = true;
   // if present consume the alert
   alert.accept();

  } catch (NoAlertPresentException ex) {
   // Alert not present
   ex.printStackTrace();
  }

  return presentFlag;

 }

here可以获取详情 也不要忘记一步一步调试。

希望对你有所帮助。

【讨论】:

    【解决方案2】:

    它可以是任何东西。你应该告诉我们。

    如果它是一个 Java 脚本警报,那么这应该可以工作

    driver.switchTo().alert().accept();
    

    如果网络应用程序自动选择/突出显示“确定”按钮,至少您可以尝试发送输入/返回键击。

    import org.openqa.selenium.Keys
    WebElement.sendKeys(Keys.RETURN);
    

    更新


    这也可能是因为在您尝试单击/接受时您的警报不存在。 对于快速检查,让其休眠 4-5 秒,然后尝试driver.switchTo().alert().accept();。一旦确定,然后等待try 和catch 循环中出现的警报(任何异常处理)。

    【讨论】:

    • 我是整个自动化交易的新手。但是,我也尝试过您对 Keys.return 的想法,但无济于事。我所知道的是,行 driver.switchto().alert.accept() 在其他应用程序上对我有用。这就是为什么我很困惑它在这里不起作用的原因。
    • 你安装了firebug(firefox add on)吗?如果没有下载它。使用该插件,右键单击弹出/警报的“确定”按钮,然后选择使用 firebug 进行检查。
    【解决方案3】:

    如果你使用的是最新版本的 webdriver,那么实际上任何高于 2.20 的版本都可以

    driver.switchTo().alert().accept();
    

    如果警报是一个类似于我们单击时得到的警报,则应该可以工作

    alert demo 或 confirm pop-up demo

    更新

    此代码将帮助您接受警报

    driver = new FirefoxDriver();
    String baseUrl = "http://www.w3schools.com/js/tryit.asp?filename=tryjs_alert";
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    driver.get(baseUrl);
    driver.switchTo().frame(0);
    driver.findElement(By.cssSelector("input[type=\"button\"]")).click();
    driver.switchTo().alert().accept();
    

    【讨论】:

    • 我不明白。我认为执行操作是生成警报的原因,那么在执行操作之前如何切换到警报?
    • 对不起,我输入了错误的警报应该在操作后被接受。更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 2012-01-04
    相关资源
    最近更新 更多