如何应用可见弹出窗口的条件,

时间:2016-01-25 06:24:39

标签: java selenium selenium-webdriver

我有应用程序,用户输入代码,在代码的基础上弹出一个结果。

但我发现在可见弹出的基础上应用代码有困难。不确定出现哪个弹出,这仅取决于代码。 enter image description here

这是html结构:

    <div class="enter-code" style="">
        <div class="code-matched" style="display:none;">
        <div class="hundred" style="display:none;">
        <div class="thousand" style="display:none;">
        <div class="five thosand" style="display:none;">
        <div class="one lakh" style="display:none;">
        <div class="code-not-matched" style="">
                 <span>The code you entered doesn’t match any in our system, please try again.</span>
        </div>
        <div class="code-box" style="display: none;">
   </div>

如果用户输入代码并且它与我们的系统匹配,则会在弹出窗口中显示一条消息,如果不存在,则会显示相同的消息。

这是代码,在Eclipes中做了什么。

  driver.findElement(By.name("nmb")).clear();
  driver.findElement(By.name("nmb")).sendKeys(a1[i]);
  driver.findElement(By.id("reward")).click();      
   Thread.sleep(6000);
    if( driver.findElement(By.xpath("//div[@class='code-matched' or  @class='code-for-first' or @class='code-for-second' or @class='code-for-third' or @class='code-for-fouth' or @class='code-not-matched']")).isDisplayed()){
      System.out.println("Hello 1");
        }
      else{
          System.out.println("Hello 1.1");
          }

我在IF条件下应用条件,但它始终在ELSE条件下打印RESULT。

2 个答案:

答案 0 :(得分:1)

弹出窗口在driver.getWindowHandles()中创建新的窗口句柄。您可以使用它来确定是否出现弹出窗口

Set<String> handles = driver.getWindowHandles();
if (handles.size() > 1) {
    System.out.println("Hello 1");
}

要对弹出窗口执行操作,您需要切换到它

String parentHandle = driver.getWindowHandle();

driver.findElement(By.name("nmb")).clear();
driver.findElement(By.name("nmb")).sendKeys(a1[i]);
driver.findElement(By.id("reward")).click();

// find all pop ups
List<WebElement> popUps = driver.findElements(By.cssSelector(".enter-code > div"));

// wait for pop up to be displayed
long startTime = System.currentTimeMillis();
boolean found = false;
do {
    for (WebElement popUp : popUps) {
        if (popUp.isDisplayed()) {
            String class = popUp.getAttribute("class");
            found = true;
            break;
        }
    }
} while (!found && (System.currentTimeMillis() - startTime) / 1000 < 5);

// switch to pop up
for (String handle : handles) {
    if (!handle.equals(parentHandle))
    {
        driver.switchTo().window(handle);
    }
}

// switch back to the old window
driver.close(); // close only the pop up
driver.switchTo().window(parentHandle);

do while循环将工作5秒或直到您找到弹出窗口,越快。 for循环将遍历弹出窗口,直到显示其中一个。

答案 1 :(得分:1)

首先切换到弹出窗口,然后对弹出窗口执行操作,然后切换回默认页面。

请尝试以下方法: -

......Your code upto pop-up appear ....

        driver.switchTo().alert();

.... Your code in between actions on pop-up ....

        driver.switchTo().defaultContent();

希望这会对你有所帮助:)。