今天在用selenium 做126邮箱登录的时候,遇到一个奇怪的问题,我在程序定位 账号/密码输入框的时候 selenium+chromedriver是可以正常定位的,但是在phantomjs下定位不了,一阵头大,接口文档中的三种方式:
原始页面:
我尝试使用以上三种方式,怎么测试都不成功,
第一种:
driver.switchTo().defaultContent();
driver.switchTo().frame("x-URS-iframe");
第二种:
driver.switchTo().defaultContent();
driver.switchTo().frame(driver.findElement(By.id("x-URS-iframe"));
第三种:
driver.switchTo().defaultContent();
driver.switchTo().frame(0);
结果很悲剧,全部失败,第二,三种在chrome下是成功的,第一种在chrome,phantomjs都失败,第二,三种在phantomjs下同样失败.想想当时就很失落,查询了各种关于iframe加载的文档,没找到一个很好的诠释;但是有一点可以肯定页面肯定
加载了,因为利用截图功能,可能清楚的看到页面已经加载.
所以就在失落之余,想到一个特别笨的方式,通过使用driver.switchTo().frame(0);这种方式,把里边所有的iframe的pageSource全部打一遍,我不相信它没有加载, 很荣幸,测试成功
使用driver.switchTo().frame(2);意外获取到想要的结果,毕竟该iframe在第一个出现
复盘:
在对的方向面前多做一些常识,在错误的基础上累加自己对常识性认知的增加,另外多了解下浏览器/js加载原理,对解决问题也有很大的帮助,当然各个浏览器内核之前的
还是不同的