Selenium2学习-013-WebUI自动化实战实例-011-We

系统 1655 0

今天有个朋友在群里问 WebElement.getText() 值为空,当你发现取到的值为空的时候,会不会郁闷呢?明明看到的值不为空,脚本看着也没有问题啊,为何取到的值为空呢!!!万千纠结啊,若是长时间困在此处,是不是犹如修炼冲关遇到了瓶颈,就差那么一点点就可得道,哎。。。。。。

不知道其他的各位小主们有没有遇到过这种情况,下面俺就针对此问题提出一些俺自己的见解,敬请各位小主参阅,若有不足或错误之处,敬请大神告知,非常感谢!

出现此种情况的原因有以下几点:

1、元素隐藏,即 WebElement.isDisplayed = false,当 WebDriver 断定 isDisplayed = false 时,WebElement.getText() 值为空;

     --> 解决方法:通过 js 修改元素的属性,使其 CSS display 的值为 block,而非 none

2、元素的值存在某个属性当中,例如 value 属性,此种一般是通过 js 操作赋值到 value 的

     --> 解决方法:通过 WebElement.getAttribute('') 获取对应的值,当 isDisplayed = false 时,WebElement.getAttribute('') 可正确获取元素对应的属性值

3、当前元素并未存储相应的操作值,操作值被存在了其他的地方

     --> 解决方法:找到对应的元素,获取值

同时,俺在网上找到了一个实例对应上述三个原因的第 3 点,因而就以易迅网搜索商品的搜索框为例,实际演示一下,以下为源码,请参阅:

        
           1
        
        
          package
        
        
           main.aaron.demo.javascript;


        
        
           2
        
        
           3
        
        
          import
        
        
           org.openqa.selenium.By;


        
        
           4
        
        
          import
        
        
           org.openqa.selenium.JavascriptExecutor;


        
        
           5
        
        
          import
        
        
           org.openqa.selenium.WebElement;


        
        
           6
        
        
          import
        
        
           org.testng.annotations.Test;


        
        
           7
        
        
           8
        
        
          import
        
        
           main.aaron.sele.core.TestCase;


        
        
           9
        
        
          10
        
        
          /**
        
        
          11
        
        
           * JavaScript 在 Selenium 自动化中的应用实例


        
        
          12
        
        
           * 


        
        
          13
        
        
           * 
        
        
          @author
        
        
           Aaron.ffp


        
        
          14
        
        
           * 
        
        
          @version
        
        
           V1.0.0: autoSeleniumDemo main.aaron.demo.javascript JavaScript.java, 2015-6-17 00:24:59 Exp $


        
        
          15
        
        
          */
        
        
          16
        
        
          public
        
        
          class
        
         JavaScript 
        
          extends
        
        
           TestCase{


        
        
          17
        
        
          //
        
        
           执行 JavaScript 脚本,输入查询内容
        
        
          18
        
        
          private
        
         String jscript = "document.getElementById('q_show').value='iPhone 6 plus'"
        
          ;


        
        
          19
        
        
          private
        
         String baseUrl = "http://www.yixun.com/"
        
          ;


        
        
          20
        
        
          21
        
        
          /**
        
        
          22
        
        
               * JavaScript 赋值


        
        
          23
        
        
               * 


        
        
          24
        
        
               * 
        
        
          @author
        
        
           Aaron.ffp


        
        
          25
        
        
               * 
        
        
          @version
        
        
           V1.0.0: autoSeleniumDemo main.aaron.demo.javascript JavaScript.java testJscript, 2015-6-17 12:37:57 Exp $


        
        
          26
        
        
               * 


        
        
          27
        
        
               * 
        
        
          @throws
        
        
           InterruptedException


        
        
          28
        
        
          */
        
        
          29
        
        
              @Test


        
        
          30
        
        
          public
        
        
          void
        
         testJscript() 
        
          throws
        
        
           InterruptedException{


        
        
          31
        
        
          //
        
        
           打开易迅网首页
        
        
          32
        
        
          this
        
        .webdriver.get(
        
          this
        
        
          .baseUrl);


        
        
          33
        
        
          34
        
        
          //
        
        
           获取搜索按钮
        
        
          35
        
                 WebElement search = 
        
          this
        
        .webdriver.findElement(By.cssSelector(".mod_search_btn"
        
          ));


        
        
          36
        
        
          37
        
        
          //
        
        
           输入查询值
        
        
          38
        
        
          this
        
        
          .execJavascript(jscript);


        
        
          39
        
        
          40
        
        
          //
        
        
           获取搜索框
        
        
          41
        
                 WebElement in = 
        
          this
        
        .webdriver.findElement(By.id("q_show"
        
          ));


        
        
          42
        
        
          43
        
        
          //
        
        
           点击搜索按钮
        
        
          44
        
        
                  search.click();


        
        
          45
        
        
          46
        
        
          //
        
        
           获取搜索值的真正存储位置
        
        
          47
        
                 WebElement intext = 
        
          this
        
        .webdriver.findElement(By.cssSelector("#keyWord"
        
          ));


        
        
          48
        
        
          49
        
        
          //
        
        
           页面刷新,需要重新获取元素,否则会报错
        
        
          50
        
                 in = 
        
          this
        
        .webdriver.findElement(By.id("q_show"
        
          ));


        
        
          51
        
        
          52
        
        
          //
        
        
           搜索框中的值未曾保存在 q_show 元素内,因而最终获得的值为空
        
        
          53
        
                 System.out.println("现像值 --- q_show.getText() : " +
        
           in.getText());


        
        
          54
        
        
          //
        
        
           搜索框中的值实际保存的元素,对应值为空的第二种原因
        
        
          55
        
                 System.out.println("本质值,对应值为空的第二种原因 --- #keyWord.getAttribute('') : " +
        
           intext.getText());


        
        
          56
        
        
          //
        
        
           搜索框中的值实际保存的元素,对应值为空的第三种原因
        
        
          57
        
                 System.out.println("本质值,对应值为空的第三种原因 --- #keyWord.getAttribute('') : " + intext.getAttribute("value"
        
          ));


        
        
          58
        
        
          59
        
        
          this
        
        
          .webdriver.close();


        
        
          60
        
        
          this
        
        
          .webdriver.quit();


        
        
          61
        
        
              }


        
        
          62
        
        
          63
        
        
          /**
        
        
          64
        
        
               * 执行 JScript 脚本


        
        
          65
        
        
               * 


        
        
          66
        
        
               * 
        
        
          @author
        
        
           Aaron.ffp


        
        
          67
        
        
               * 
        
        
          @version
        
        
           V1.0.0: autoUISelenium main.java.aaron.sele.core SeleniumCore.java execJavascript, 2015-6-17 00:25:38 Exp $


        
        
          68
        
        
               * 


        
        
          69
        
        
               * 
        
        
          @param
        
        
           jscript 脚本


        
        
          70
        
        
          */
        
        
          71
        
        
          public
        
        
          void
        
        
           execJavascript(String jscript){


        
        
          72
        
                 ((JavascriptExecutor)
        
          this
        
        
          .webdriver).executeScript(jscript);


        
        
          73
        
        
              }


        
        
          74
        
         }
      
WebElement.getText() 为空及解决实现源代码

至此, WebUI 自动化功能测试脚本 第 011 篇-WebElement.getText()值为空问题探索及解决 顺利完结,希望此文能够给初学 Selenium 的您一份参考。

最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^

Selenium2学习-013-WebUI自动化实战实例-011-WebElement.getText()值为空问题探索及解决


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论