关于selenium多层iframe切换,及iframe没有id和name属性的情况下进行切换的问题。(如下图:)
问题:
1. 在切入到frame:left中后,直接切换其他同级和上级frame报错
2. 在切入到frame:left中后,再切换到它下面的frame:index时后无法直接定位要获取的div如上图
原因分析:
问题1:在切入到frame:left中后,要切换到与left同级的frame:index中,需先切回到初始状态defaultContent。然后再逐级向内层的frame中切换
问题2:在切入到内层的frame:index中后,发现还有一个iframe没有名称和id,需要先切换到该iframe中才能定位到需要的div
// 代码:
public class testFrame {
private WebDriver driver;
private String baseUrl;
private WebDriverWait wait;
@Before
public void setUp() {
driver = new FirefoxDriver();
baseUrl = "http://XXXX";
wait = new WebDriverWait(driver, 5);
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}
@Test
public void testFrame() throws InterruptedException {
driver.get(baseUrl);
wait.until(new ExpectedCondition<WebElement>() {
@Override
public WebElement apply(WebDriver d) {
// TODO Auto-generated method stub
return d.findElement(By.tagName("frame"));
}
});
driver.switchTo().frame("index");
driver.switchTo().frame("mainindex");
driver.switchTo().frame("left");
driver.findElement(By.xpath("//li[2]/span")).click();
driver.findElement(By.xpath("//li[3]/span")).click();
driver.findElement(By.xpath("//li[3]/ul/li/a/span")).click();
driver.switchTo().defaultContent();
driver.switchTo().frame("index");
driver.switchTo().frame("mainindex");
driver.switchTo().frame("index");
driver.switchTo().frame(driver.findElement(By.tagName("iframe")));
driver.findElement(By.xpath("/html/body/div/div"));
}
@After
public void tearDown() {
driver.quit();
}
}