模态叠加导致同一页面上的其他链接出现问题

时间:2014-02-21 22:32:01

标签: java modal-dialog selenium-webdriver

我的主网页包含多个链接,其中一个是模态。 当我点击“了解更多”(参见下面的HTML代码)时,主页面顶部会打开一个模态。我能够比较预期和实际链接,但对于主页上的其余链接,我无法比较实际和预期。这些链接在单独的窗口中显示其内容。 HTML没有IFRAME标记。

谢谢,

 <span id="ctl00_ContentPlaceHolder1_ExpirationDate" class="ExpirationDateSkin">
 <span class='topCopy'>Enter your account # below and<br />click "Register" <br /> to take advantage of this promotion.
 </span><div class='learnMoreLink'>
 <span class='adaScnReaderText'>open overlay 
 </span>
 <a href='#'>Learn More</a></div></span>

以下是您要求的代码。请阅读上面的问题。 谢谢,

 String mainWindowHandle=driver.getWindowHandle();

   driver.findElement(By.xpath("//span[@id='ctl00_PlaceHolder1_ExpirationDate']/div/a")).click();

 Set s = driver.getWindowHandles();
 Iterator i = s.iterator();
   while(i.hasNext())
 {
String popupHandle=i.next().toString();
if(!popupHandle.contains(mainWindowHandle)) {

driver.switchTo().window(popupHandle);
 }

 driver.findElement(By.xpath("//div[@id='enroll']/div/div/a")).click(); 
 }

1 个答案:

答案 0 :(得分:0)

您可以通过多种不同方式导航到其他位置。

一些例子:

  • driver.get(...)
  • driver.switchTo().frame(...)
  • driver.switchTo().window(...)
  • driver.switchTo().defaultContent()
  • driver.findElement(...).click()
  • driver.navigate().back()
  • driver.navigate().forward()
  • driver.navigate().to(...)
  • driver.navigate().refresh()

但是一旦你这样做,你从前一个DOM获得的任何元素都可能变得“陈旧”。

为了避免在特定示例中出现这种情况,请先保存所有相关窗口句柄字符串的列表:

List<String> handles = new ArrayList<String>();
Set s = driver.getWindowHandles();
Iterator i = s.iterator();
while (i.hasNext())
{
    String popupHandle = i.next().toString();
    if (!popupHandle.contains(mainWindowHandle))
        handles.add(popupHandle);
}

然后,切换到每个窗口并在该窗口上执行任何您想做的事情:

for (String handle : handles)
{
    driver.switchTo().window(handle);
    // Do whatever you wanna in here
    driver.switchTo().defaultContent();
}

请注意,在某些网页上,当您进入网页“进出”时,窗口句柄名称可能会发生变化。这种情况也可以处理,但它有点棘手;如果需要帮助,请告诉我......