Selenium+TestNG+Java测试过程中的点滴记录
- 在实际开发中发现某项目的一些页面中,select下拉框被span标签修改过,导致无法调用Select方法来实现下拉框的选值,解决办法是直接通过selenium的模拟鼠标操作来实现,或者通过对元素的依次点击来实现。
- 某些input的text文本框,页面默认设置value=0,在实际开发中,尽管用.clear()方法先清除文本框后再填值,实际发现原来默认值仍然没有被清除,因此导致设置的值前面有0,从而数据错误,解决办法是用Selenium提供的JS执行器,执行JS代码来实现值填写。
- 关于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>