Selenium+TestNG+Java测试过程中的点滴记录

  1. 在实际开发中发现某项目的一些页面中,select下拉框被span标签修改过,导致无法调用Select方法来实现下拉框的选值,解决办法是直接通过selenium的模拟鼠标操作来实现,或者通过对元素的依次点击来实现。
  2. 某些input的text文本框,页面默认设置value=0,在实际开发中,尽管用.clear()方法先清除文本框后再填值,实际发现原来默认值仍然没有被清除,因此导致设置的值前面有0,从而数据错误,解决办法是用Selenium提供的JS执行器,执行JS代码来实现值填写。
  3. 关于xpath,有table如下:
<table>
<tr>
<td>唯一标识符1</td>
<td><a  href="javascript:void(0)">签收</a></td>
</tr>
<tr>
<td>唯一标识符2</td>
<td><a  href="javascript:void(0)">签收</a></td>
</tr>
</table>

 

实际测试中,tr随时会增加,因此想通过根元素,层层检索来获得"唯一标识符1"所在tr下的【签收】链接元素是不可能的,

换个思路:通过 “唯一标识符1”确定td,然后返回父节点tr,然后再确定a所在的td,最后获取a,xpath语法如下://*[text()="唯一标识符1"]/parent::tr/td[2]/a

红色部分parent::tr意思是返回父节点为tr的节点

4. xpath定位中,有个节点是<span class="menu-text"> 贷款管理 </span>,在chrome中使用//span[text()="贷款管理"]的xpath怎么都找不到该节点,后来才发现原来文本“贷款管理”里面左右两边都有空格,加上空格后就能找到该节点了,遇到此情况时,可以使用//span[contains(text(),"贷款管理")]来找到该节点,即使用contains()函数来找节点。

5. 检查页面里是否包含某些文字,可以用driver.getPageSource().contains("XXX") 来判断,返回值为true/false

6. HTML5内联SVG标签,如下所示:

<div class=......>
  <svg version="1.1" ....>
    <g class="123">
      <path d="....."></path>
    </g>
  </svg>
</div>

如果想获取g元素,直接使用xpath来查找 //g[@class='123'],会提示找不到该元素,解决办法是 //*[name()='g' and @class='123'],同理,找<path> 元素也可以用//*[name()='path' and @d='....']定位元素

7.有些webservice API返回的数据为json格式,此时可以用JsonReader.readJsonFromUrl()方法来获取该API返回的值,该方法返回json object。

8.Assert.assertTrue(false, failMessage);直接设置assert 为false, case执行的结果是failed.

9.System.out.println()和System.err.println()区别在于,前者可能因为缓存原因导致输出信息暂时不会被输出来,而后者可保证立即输出,调试程序时,尽量选择后者打印。

10. 在TestNG 6.x及以上版本,执行testng时会遇到ClassNotFoundException: com.google.inject.Module 错误(同时会出现的问题是reportng产生的测试报告打开出现404现象),原因是没有导入依赖Guice, 解决办法是在pom.xml里导入如下依赖:

<dependency>
    <groupId>com.google.inject</groupId>
    <artifactId>guice</artifactId>
    <version>3.0</version>
    <scope>test</scope>
</dependency>

  

 

posted @ 2017-02-24 09:46  钱_进  阅读(575)  评论(0编辑  收藏  举报