若定位元素在iframe内,则表示定位元素在页面的子页面中,需要完成页面切换才能找到子页面中的元素
driver.switchTo().frame();
可以通过index,name,id,WebElement定位子页面
操作完以后,需要通过driver.switchTo().defaultContent();切换回主页面
例如:
网易相册,登录页面
WebDriver dr = new FirefoxDriver(); dr.get("http://photo.163.com"); //切换到页面的子页面 dr.switchTo().frame(dr.findElement(By.xpath( "//iframe[@src='http://blog.163.com/newpage/ursweb/tmpl2/loginurs.html']"))); //切换到页面的子页面 dr.switchTo().frame(dr.findElement(By.id("x-URS-iframe"))); dr.findElement(By.name("email")).sendKeys("xxxxxx"); dr.findElement(By.name("password")).sendKeys("xxxxxx"); dr.findElement(By.id("dologin")).click(); //切换回主页面 dr.switchTo().defaultContent(); dr.switchTo().defaultContent();
返回到最父页面后,点击进入我的相册,一直找不到element,以为是xpath不对,各种修改都不正确,后来设置页面加载等待时间后,成功进入我的相册。自动化速度较快,页面未加载完全的原因。
如:
dr.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); dr.findElement(By.xpath("//div[@id='J-loginMod']/div/a[1]/span[1]")).click(); dr.quit();