【问题标题】:Unable to 'Close' Modal Popup无法“关闭”模式弹出窗口
【发布时间】:2017-01-10 11:46:31
【问题描述】:

我无法关闭模式,当我访问我想要的 URL 时,我会看到一个模式弹出窗口。 1.我试过等待并点击元素 2. 也尝试通过“警报”代码关闭 3. 全部关闭弹窗都不成功

感谢您的帮助,

【问题讨论】:

  • 模态框是否在单独的 iframe 中?
  • @cathal 感谢您的回复,据我所知,我无法识别任何 iframe,请查看附加的最新图片
  • 你能告诉我你是如何选择 WebElement 的吗?
  • @cathal its: WebDriverWait wait = new WebDriverWait(driver, 30); wait.until(ExpectedConditions.elementToBeClickable(button_ClosePopupPage)); button_ClosePopupPage.click();
  • @cathal 请同时找到我的定位器:public @FindBy(css=".close") WebElement button_ClosePopupPage;

标签: java selenium selenium-webdriver webdriver


【解决方案1】:
check , whether it is separate window, if it it then will code might be work 


private static Object Handle1;
private static Object Handle2;

public static void switchToWindowsPopup() {
    Set<String> handles = DriverManager.getCurrent().getWindowHandles();
    Iterator<String> itr = handles.iterator();
    Handle1 = itr.next();
   Handle2 = Handle1;
    while (itr.hasNext()) {
        lastHandle = itr.next();
    }
    DriverManager.getCurrent().switchTo().window(Handle2.toString());
}

public static void switchToMainWindow() {
    DriverManager.getCurrent().switchTo().window(Handle1.toString());

【讨论】:

    【解决方案2】:

    以下代码可能会对您有所帮助 -

    driver.findElement(By.xpath("//span[contains(text(),'CLOSE')]")).click();
    

    或者这样使用JavascriptExecuter-

    WebElement element = driver.findElement(By.xpath("//button[@class='close']"));
    JavascriptExecutor js= (JavascriptExecutor)driver;
    js.executeScript("arguments[0].click();", element);
    

    【讨论】:

      【解决方案3】:

      我的猜测是,为了关闭对话框,您需要点击“x”。我假设这是因为您正在等待按钮元素变为可点击,但它永远不会。所以,我建议让您的定位器更具体:

      @FindBy(xpath = "//button[@class='close']/span")
      WebElement closeButton;
      

      请让我知道,如果这可行..或者如果不可行会发生什么。

      【讨论】:

      • 您的XPath 无效:您应该使用@class='close' 而不是@class=='close'
      • 感谢所有@Saurabh Gaur 方法有效,有人知道为什么我会在使用 Firefox 和 geckodriver 的用户旅程的不同阶段出现弹出窗口,但尝试通过登录时弹出窗口不会重新出现铬?
      【解决方案4】:

      来自评论

      感谢@cathal 的快速回复,当预期时间过去后,我收到一个超时错误,即元素不可见/定位器不可用

      实际上您的定位器不会返回唯一结果。有多个close button 元素具有相同的类名close

      不幸的是,您遇到了不可见的对话框close button,这就是您遇到麻烦的原因。

      您应该尝试以下方法:-

      WebDriverWait wait = new WebDriverWait(driver, 10);
      List<WebElement> elements = wait.until(ExpectedConditions
                      .presenceOfAllElementsLocatedBy(By.cssSelector(".close")));
      for (WebElement element : elements) {
          if (element.isDisplayed()) {
              element.click();
          }
      }
      

      【讨论】:

      • 有没有办法持续检查弹出窗口并因此关闭?
      猜你喜欢
      • 2015-10-09
      • 1970-01-01
      • 2017-06-04
      • 1970-01-01
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      相关资源
      最近更新 更多