【问题标题】:How to close the Modal using Selenium WebDriver?如何使用 Selenium WebDriver 关闭 Modal?
【发布时间】:2019-06-25 16:15:11
【问题描述】:

我有一个下拉列表,当我单击任何下拉值时,会打开一个模式,当我在模式外单击时,它将关闭。 Selenium WebDriver如何处理?

这是我的模态代码

<div class="modal fade bd-example-modal-sm show" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" style="display: block;">
  <div class="modal-dialog modal-sm">
     <div class="modal-content">You click on Dropdown hover Option
     </div>
  </div>

我试过下面的代码

driver.switchTo().defaultContent();

driver.switchTo().alert().dismiss();

但两者都不起作用。

【问题讨论】:

  • 试试driver.switchTo().activeElement() 不确定,但请尝试让我们知道
  • 这不是 JavaScript 警报,因此您不需要使用 switchTo() 功能。只需单击另一个元素即可将其关闭。
  • 尝试使用操作 API 发送 ESC 键盘命令。它将逃脱模态并关闭。
  • 模态对话框不是在一定时间间隔后自动消失吗?是否需要在模态外点击?
  • @Ardesco,我试图点击 POM 中的其他元素,但得到 org.openqa.selenium.ElementClickInterceptedException

标签: java selenium selenium-webdriver


【解决方案1】:

如果您不想按 Esc 键,可以单击已创建的 div 以覆盖页面的其余部分,使用以下命令:

    driver.get("https://demo.stqatools.com/MouseHover.php");
    WebElement hoverButton = driver.findElement(By.cssSelector(".dropbtn"));
    WebElement linkOne = driver.findElement(By.cssSelector(".dropdown-content > a"));

    //Activate modal dialogue
    Actions action = new Actions(driver);
    action.moveToElement(hoverButton).perform();
    wait.until(ExpectedConditions.visibilityOf(linkOne));
    action.moveToElement(linkOne).click().perform();

    //Dismiss modal dialogue
    driver.findElement(By.cssSelector(".show")).click();

【讨论】:

    【解决方案2】:

    这不是alert,它只是DOM 的普通片段,由于CSS styling,它看起来像一个模态弹出窗口

    所以您需要做的就是使用例如它的文本来定位元素,相关的XPath locator 将类似于:

    //div[contains(text(),'You click on Dropdown hover Option')]
    

    通过WebDriverWait“等待”直到弹出出现/难以处理也很好,例如:

    new org.openqa.selenium.support.ui.WebDriverWait(driver, 10)
            .until(
                    ExpectedConditions.elementToBeClickable(
                            By.xpath("//div[contains(text(),'You click on Dropdown hover Option')]")))
            .click();
    

    【讨论】:

      【解决方案3】:

      最简单的方法是点击页面上的一些静态文本。 尝试点击页面标题(如果存在)。

      【讨论】:

      • 点击页面标题?你确定吗?
      • 是的,或者页面上的任何其他元素。点击静态文本是最安全的操作,因为测试不影响也不改变系统。
      • 点击页面标题的代码示例?
      • 例如:DOM 有 //h2[.='个人信息'] 页面屏幕prnt.sc/o5zmkv 示例?只是通常的 Selenium 点击,没有别的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      • 2017-07-24
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多