博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Selenium系列之--03【转】页面元素找不到问题的分析思路
阅读量:5309 次
发布时间:2019-06-14

本文共 1099 字,大约阅读时间需要 3 分钟。

如果在测试过程中遇到了NoSuchElementException 这个异常, 说明元素查找失败。

Caused by: org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"id","selector":"abc"}

失败的原因可能有很多,常见的几种可能性和对应解决办法如下:

1.定位有没有写正确.

这点很重要,尽量在使用元素定位前用firepath等工具去调试下定位的准确性,为了避免引起其他问题,最好确保元素定位的唯一性.

 

2.元素出现的时间有延迟,需要设置等待时间

现在的网页中很多是有ajax交互的,你要寻找元素的时候,有可能是基于上面的步骤操作,才出现这个元素,而且由于网络的原因,元素加载可能需要一定的时间,所以这里一定要在查找元素的时候使用等待。

Webdriver提供了两种等待方式

1)implicitlyWait 隐式等待

-只需要实例化driver 之后加上代码 dr.manage().timeouts().implicitlyWait(3000, TimeUnit.MILLISECONDS);即可

2)ExplicitlyWait 显示等待

-这个在webdriver中是使用webdriverwait来描述的,可以结合ExpectedConditions这个类来使用

WebDriverWait wait = new WebDriverWait(dr, 30000);

wait.until(ExpectedConditions.visibilityOf(dr.findElement(By.xpath("//*[@id='xxx']"))));

 

3.元素是在frame中的

这是一个常见的问题,稍微复杂的页面其中就有可能有frame. 而且有些框架开发的网站使用了大量的frame. 比如ExtJs.

如果元素在frame中,我们只需要将driver切换到frame中去查询就可以了

代码可以是:

WebElement frame = dr.findElement(By.xpath("//*[@id='frameid']"));

dr.switchTo().frame(frame);

 

4.元素是在另外一个窗口中的

这个应该是好判断的,如果在操作过程中弹出了新窗口,我们要对新窗口中的元素进行查找和操作的话,我们首先要进行窗口的切换.

具体可以参考 

转载于:https://www.cnblogs.com/liuyitan/p/7210275.html

你可能感兴趣的文章
angular监听
查看>>
架构-缓存
查看>>
iOS开发中遇到的问题:Multiple commands produce '^^^^^
查看>>
PE2 Even Fibonacci numbers(最大菲波那列偶数)
查看>>
【Socket】linux无连接编程技术
查看>>
客户购买我方产品的时候,是将款打到哪里?
查看>>
集群时间同步
查看>>
ORACLE触发器详解
查看>>
ansible-1 的安装
查看>>
gulp介绍
查看>>
关于asp.net中gridview的问题,关于footer,16aspx上下的英语交流网程序,管理员的添加和修改有问题...
查看>>
Codeforces 242 E. XOR on Segment
查看>>
siblings() next() nextAll() nextUntil() prev() prevAll() prevUntil() 在 DOM 树中水平遍历
查看>>
Nodejs技巧
查看>>
trigger事件就是继承某一个类的事件.
查看>>
统一进程的线程能共享的内容
查看>>
Matlab提供了两种除法运算:左除(\)和右除(/)
查看>>
HttpResponse render render_to_response 三者的区别
查看>>
一张纸勾起的回忆
查看>>
python-day03(记录)
查看>>