我的主网页包含多个链接,其中一个是模态。 当我点击“了解更多”(参见下面的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();
}
答案 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();
}
请注意,在某些网页上,当您进入网页“进出”时,窗口句柄名称可能会发生变化。这种情况也可以处理,但它有点棘手;如果需要帮助,请告诉我......