51Testing软件测试论坛

标题: 判断所查找的元素是否存在,遇到了问题,求帮助! [打印本页]

作者: OverTimeDog    时间: 2015-11-28 17:42
标题: 判断所查找的元素是否存在,遇到了问题,求帮助!
本帖最后由 OverTimeDog 于 2015-11-28 17:55 编辑

<div class="mod-select-licence">
        <a target="_self" href="/bmp/vender/qualificationbind?license_type=incoming_certificate,hygiene_certificate&item_id=6146475799328406720&id=10126&lic_id=3947733990452259872&flow=#list">选择已经添加过的内容</a>
</div>
因为上面一段代码在一个页面中有时存在,有时候不存在,所以我想用if else判断,当它存在的时候执行一部分操作,不存在的时候执行另一部分操作
但是现在页面不存在这个文案的时候,程序总是报错,用了很多方法都不行
试了调用下面这个方法,还是报错!
public static boolean isElementExist(By by){
      try{
           driver.findElement(by);
           return true;
         }
     catch(NoSuchElementException e){
           return false;
        }
        }
求助各位大神,到底应该怎么写,才能正确的执行!




作者: kfc427    时间: 2015-11-30 00:03
这个问题值得关注
不懂帮顶
作者: wuxi88    时间: 2015-11-30 11:16
程序总是报错,无图无真相
作者: OverTimeDog    时间: 2015-11-30 11:44
wuxi88 发表于 2015-11-30 11:16
程序总是报错,无图无真相

就是没有找到元素啊...因为这个元素的判断我写在了if里面,这段文字连接有时候有,有时候没有,我的问题就是找不到元素的时候如何能继续执行
作者: joykao    时间: 2015-11-30 13:47
你这么设计有漏洞的因为的if,else语句中的true or false还是根据最后driver.findElement()去找元素再判断存不存在,这个本来就不对,如果元素存在那没问题返回值可以是true,元素不存在,driver.findElement()本身就会跑出异常,返回false毫无意义根本不会执行到那边,判断元素存不存在本身就是检查点,这种存在和不存在后的操作应该要拆分成不同的用例,如果元素会显示出来,只是时间问题那你就加上等待,等元素出现在操作
作者: OverTimeDog    时间: 2015-11-30 15:02
joykao 发表于 2015-11-30 13:47
你这么设计有漏洞的因为的if,else语句中的true or false还是根据最后driver.findElement()去找元素再判断 ...

大神 你说的确实很对,其实我就是想判断不管元素是否找到,都能够把程序执行下去。我说的这个问题不是时间问题,如果这个页面没有文本链接,就不会再有,如果有这个文本链接,就一直有。所以我说的这种情况,就没有办法执行下去了是么?
作者: wuxi88    时间: 2015-11-30 17:07
给你提供一个思路,看看能不能解决,你不是说他时有时没有嘛,执行了某操作之后等待X秒中,然后在执行的boolean方法,这样或许可以解决。
作者: OverTimeDog    时间: 2015-11-30 19:38
wuxi88 发表于 2015-11-30 17:07
给你提供一个思路,看看能不能解决,你不是说他时有时没有嘛,执行了某操作之后等待X秒中,然后在执行的boo ...

请问等待几秒钟的意义是...?我是进入那个页面就会知道有没有那个文本链接...显示不显示跟等待几秒没什么关系呀
作者: OverTimeDog    时间: 2015-12-1 14:57
持续关注此问题,希望有大神能给点思路!
作者: OverTimeDog    时间: 2015-12-1 14:57
持续关注此问题,希望有大神能给点思路!
作者: hazer    时间: 2015-12-2 11:18
可以通过时间来控制, 使程序可以执行下去:
看看以下对你有没有用:
public static WebElement waitUntilElementDisplay(int waittime, String xpath) throws Exception {
                long nowTime = System.currentTimeMillis();
                WebElement webe = null;
                while ((System.currentTimeMillis()- nowTime)/1000 < waittime){
                        try{
                                webe = driver.findElementByXPath(MyUtils.getXpath(xpath));
                                if(webe.isDisplayed()==true){
                                        break;
                                }else{
                                        Thread.sleep(1000);               
                                }
                        }catch(NoSuchElementException e ){
                                System.out.println("Wating for.." + (System.currentTimeMillis()- nowTime)/1000 + "..seconds; " );
                                Thread.sleep(1000);
                        }
                }
                return webe;       
        }
作者: @吕小布    时间: 2015-12-4 11:30
增加等待时间:等待页面加载完成
然后按照你写的if else 去执行;若出现执行一部分操作,若没有出现执行另外一部分操作;
你出现的这个现象:有时候有,有时候没有;我觉得是页面没有加载完成导致;
一般这种就是增加等待时间,使网页加载完成,然后再去判断元素是否存在;
作者: fhhh_eyou    时间: 2015-12-4 13:46
1. 先判断:”现在页面不存在这个文案的时候,程序总是报错“ 文案是否存在;
2. 再存在时引用返回值信息
3.不存在时,返回值设置一个特定值,给一个输出信息;
4.也可以使用宏定义
作者: soulT    时间: 2015-12-9 10:48
支持:::::增加等待时间:等待页面加载完成 后再去查找页面元素




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2