点击主窗口上的链接后,我尝试点击新打开的浏览器窗口上的链接但是webdriver无法在新打开的窗口中找到该元素。
下面是我用来打开另一个窗口然后对其执行操作的代码。
public void test() throws Exception{
driver.findElement(By.xpath("//img[@alt='Calender']")).click();
String Parent_Window =driver.getWindowHandle();
for (String Child_Window : driver.getWindowHandles()) {
driver.switchTo().window(Child_Window);
driver.findElement(By.xpath("//div[@class='pbBody']//table[@class='list']//tr[@class='dataRow even first']//a")).click();
// Webdriver is not able to click on the above link and it fails at this step
}
driver.switchTo().window(Parent_Window);
}
请帮我解释为什么wedrivber在切换后无法在新的浏览器窗口中找到该元素。谢谢!
答案 0 :(得分:2)
试试这个,我对窗口手柄有严重的问题,但这个似乎更好。
String parentWindowHandler = driver.getWindowHandle();
String subWindowHandler = null;
Set<String> handles = driver.getWindowHandles();
Iterator<String> iterator = handles.iterator();
while (iterator.hasNext()){
subWindowHandler = iterator.next();
}
driver.switchTo().window(subWindowHandler);
driver.findElement(By.xpath("")); //do something
driver.switchTo().window(parentWindowHandler);
答案 1 :(得分:1)
您的测试在for循环中driver.findElement
失败,因为在第一次迭代中,它正在选择第一个窗口并尝试查找该链接。如果您的父窗口(而不是弹出窗口)中不存在该链接,那么您的测试将在此步骤失败。
如果只打开2个窗口,那么你应该这样做:
public void test() throws Exception{
driver.findElement(By.xpath("//img[@alt='Calender']")).click();
String Parent_Window =driver.getWindowHandle();
String Child_Window = driver.getWindowHandles().iterator().next();
driver.switchTo().window(Child_Window);
driver.findElement(By.xpath("//div[@class='pbBody']//table[@class='list']//tr[@class='dataRow even first']//a")).click();
driver.switchTo().window(Parent_Window);
}
或者,如果您使用getting started with selenium framework,您的测试将如下所示:
@Config(url="http://testsite.com")
public void Test extends AutomationTest {
@Test
public void test() {
click(By.cssSelector("img[alt='Calender']"))
.switchToWindow("Title of New Window")
.click(By.cssSelector("div.pbBody table.list tr.dataRow.even.first a"))
.switchToDefaultContent();
}
}
答案 2 :(得分:1)
在for循环中找不到元素。 查找下面的元素for循环。 (执行循环后)
String parentWindow = webDriver.getWindowHandle();
Set<String> handles = webDriver.getWindowHandles();
for (String windowHandle : handles) {
if (!windowHandle.equals(parentWindow)) {
webDriver.switchTo().window(windowHandle);
}
}
答案 3 :(得分:0)
是的,我可以运行框架工作的其他脚本,但即使我不知道问题是什么,因为我能够打印该窗口的标题,但webdriver无法在该窗口找到任何元素。