在用selenium作自动化测试的时候,总会遇到元素定位不到的状况,明明就是这个元素但老是报“Unable to locate element”,如下是本身遇到的三种状况,作一个简单的总结:html
1.多是网络延迟等缘由,因等待时间不足而形成的,这种状况就添加休眠时间:网络
我此次就是这样的,在定位姓名的时候老是报找不到元素的错,框架
1 driver.findElement(By.xpath("/html/body/form/div[5]/div/div[1]/div[5]/div/div[2]/div/ul/li[2]/input")).sendKeys("张三"); 2 3 Thread.sleep(1000);
一直报错,一直到等待时间增长到5000:Thread.sleep(5000);才经过测试
这种状况碰到过好屡次,有时候今天运行没问题的代码,明天可能就会报错,在本身电脑运行没问题的,换一台机器可能就通不过;因此后来遇到报“Unable to locate element”这种错误的,先增长如下等待时间试试;spa
2.可能是由于跳转了页面,而在代码中没有切换句柄:code
遇到“Unable to locate element”错误,排查不出问题的能够把先后的句柄先打印出来,对比如下,看看是否是由于没有切换句柄所引发的:orm
1 //获取页面1句柄 2 String handle1 = driver.getWindowHandle(); 3 System.out.println("主页面1句柄:"+handle1); 4 //获取页面2句柄 5 String handle2 = driver.getWindowHandle(); 6 System.out.println("主页面2句柄:"+handle2);
打印出以后,能够对比一下,是否一致。若不一致则须要切换句柄htm
1 //切换句柄 2 driver.switchTo().window(handle);
切换句柄以后,再进行元素定位。blog
注意:切换完句柄执行成功以后,若果再离开当前页面,记得把句柄再切换回去,操做同切换当前句柄一致。ci
3.要定位的元素处在不一样的框架——iframe,也有遇到过这种状况,要定位的元素属于另一个框架。我的认为这种状况是最很差整的,由于到如今为止尚未发现一个能很快很准确的找到不一样的框架并定位出来(可能有这样的办法,只是本身不知道而已),遇到这种状况要先退出当前的frame,而后再进入定位元素所在的frame;
1 //退出当前frame 2 driver.switchTo().defaultContent(); 3 //选择fram 4 driver.switchTo().frame(driver.findElement(By.id("mainFrame")));
driver.switchTo().frame(driver.findElement(By.id("mainFrame")));其中标红的部分就是要定位元素所在框架的定位,定位方式和元素定位方式一致,因此须要先准肯定位框架。
目前遇到的就是这三种状况,之后遇到新的状况再更新。
一直