zoukankan      html  css  js  c++  java
  • Selenium系列之--05 页面元素找不到的分析思路

    如果在测试过程中遇到了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. 元素是在另外一个窗口中的

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

    具体可以参考 http://www.webdriver.org/article-26-1.html

  • 相关阅读:
    Visual Studio 20年
    cocos2d-x 重力感应 加速器的使用
    大规模高性能站点架构设计思路整理
    MySQL
    drools 的一个小demo
    springboot使用hibernate validator校验
    mybatis JdbcTypeInterceptor
    ColorPic 一套簡單好用的顏色選擇器!
    WebStorm ES6 语法支持设置
    css中单位em和rem
  • 原文地址:https://www.cnblogs.com/liuyitan/p/7210275.html
Copyright © 2011-2022 走看看