回顾下小本年用selenium, python 做automation的小结吧。
都是些小点点。
- 通过获取父类的text值来得到其子类的text值:parent_ele.text 要注意如果某个子元素的text值为空, 获取到的text字符串值不会为空的子元素保留值占位符。
如下面所示,tr下面总共有三个td,应该获得三个td的值,但是假设第二个td的值为空,那么总共得到的text值长度为二。 所以如果想使用这种方法获取每个td的值的时候要小心。
举例:
如下所示,
print context = row_element.text
print(len(context.split('\n')))
Console:
11233\n1 day\n
2
java
code:
<tbody>
<tr>
<td><b>11322</b> </td>
<td></div></div> </td>
<td><div><div>1 day</div></div></td>
</tr>
</tbody>
- 隐藏的元素,虽然是exists的,但是通过text得到的值为空。
- 使用selenium 获取的元素的text都是字符串,所以在比较期望的值的时候,注意值的数据类型。
- 总结一些定位元素的知识
若遇到测试对象很多都是用的动态id或者class,或者没有唯一属性可以定位,会为automation带来困难。 所以要学会通过兄弟找到自己或者通过父亲找到自己等一些技巧。
starts-with ,查找指定属性前缀的元素
xpath='//*[starts-with(@id,"reservation")]'
通过父类元素获得子元素 ./
name_xpath = './td[1]'
parent.getElementByXpath(name_xpath)
多个属性来定位元素
xpath='//*[starts-with(@id,"vcacPagingToolbar") and @class="x-box-inner"]/div/div[last()]/../a[3]'
../查找当前元素上级,有兄弟或者子孙定位元素
delete_detail_hidden = '//table[@aria-hidden="true"]//*[text()="Cannot delete reservation policy:"]/../../../tr[2]/td/div'
xpath的谓语
/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<3] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
未完待续。。。。
网友评论