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



我的主网页包含多个链接,其中一个是模态。当我单击"了解更多"(请参阅下面的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(); 
 }

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

举几个例子:

  • 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();
}

请注意,在某些网页上,窗口句柄名称可能会随着您"进出"网页而更改。这个案子也可以处理,但有点棘手;如果需要帮助,请告诉我...

最新更新