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


    今天有个朋友在群里问 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 的您一份参考。

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

  • 相关阅读:
    Java 给Word指定字符串添加批注
    Java 打印Word文档
    Java 在PDF中添加页面跳转按钮
    C# 添加、修改、删除Excel图表数据标签
    C# 添加、读取、删除Excel文档属性
    Java 操作Word表格——创建嵌套表格、添加/复制表格行或列、设置表格是否禁止跨页断行
    【Luogu5348】密码解锁(莫比乌斯反演,数论)
    AtCoder Grand Contest 015
    AtCoder Grand Contest 014
    Codeforces Round #556 (Div. 1)
  • 原文地址:https://www.cnblogs.com/fengpingfan/p/4583362.html
Copyright © 2020-2023  润新知