Set<String> windows2 = w.getWindowHandles();
System.out.println(windows2.size());
for(String handles : windows2)
{
w.switchTo().window(handles);
}
System.out.println("Windows after itteration : "+windows2.size());
Thread.sleep(2000);
System.out.println(w.getTitle());
w.switchTo().frame(w.findElement(By.xpath("//frame[@name='MainFrame1']")));
w.findElement(By.name("blnggrp")).click();
w.switchTo().defaultContent();
Thread.sleep(2000);
Set<String> windows3 = w.getWindowHandles();
System.out.println(windows3.size());
for(String hanldes : windows3)
{
w.switchTo().window(hanldes);
}
Thread.sleep(2000);
w.switchTo().frame(w.findElement(By.xpath("//frame[@name='code_desc']")));
w.findElement(By.name("resulted_cond")).click();
w.switchTo().defaultContent();
错误:线程“main”中的异常 org.openqa.selenium.NoSuchElementException:无法找到元素 使用xpath == // frame [@ name ='code_desc']
答案 0 :(得分:0)
不要使用Thread.sleep()
,而是尝试使用等待。有两种类型 - 隐式等待和显式等待。您可以从here了解有关它的更多信息。
现在尝试删除所有Thread.sleep()
语句并设置隐式等待驱动程序,然后执行代码:
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
答案 1 :(得分:0)
我将使用的解决方案是WebDriver的driver.switchTo()。frame()方法,但避免索引号(您使用窗口句柄和ID的组合)w.switchTo().window(handles);
是你错误的失败的原因。您可以删除它并选择您想要使用的窗口;
一个例子:
driver.switchTo().frame(driver.findElement(By.name("blnggrp")));
正如杰森所建议的那样,如果你把它与隐含的等待结合起来,你就会得到最好的解决方案
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));