一个完整的UI自动化测试(Python)必须有什么部分?
Python有许多有用的内建模块(os,subprocess,socket,urllib,httplib,re,sys等等)和第三方模块(cymruwhois,scapy,dpkt,spider等等).使用Python模块很简单”import ”
OS模块是非常重要的因为你需要在你的Python代码里面调用系统命令 !
--------------------------------------------------------------------------------------------------------------------------
元素定位:
- find_element_by_class_name(self, name) //className属性是利用元素的css样式表所引用的伪类名称来进行元素查找的方法。对于任何HTML页面的元素来说,一般程序员或页面设计师会给元素直接赋予一个样式属性或者利用css文件里的伪类来定义元素样式,使元素在页面上显示时能够更加美观。
- find_element_by_css_selector(self, css_selector) //一个元素素指定了若干个class属性值的”复合样式“,指定了若干个css伪类名作为它的样式属性值时,需要用cssSelector来定位。
- find_element_by_id(self, id_) //通过指定元素的id来进行定位。
- find_element_by_link_text(self, link_text) //通过超文本链接上的文字信息来定位元素。
- find_element_by_name(self, name) //通过指定元素的name来进行定位。
- find_element_by_partial_link_text(self, link_text) //使用关键字与超文本链接上的文字信息进行匹配来定位元素,当定位到多个元素时,find_element 只会返回第一个元素,如果要返回全部需要用find_elements方法。
- find_element_by_tag_name(self, name) // //通过指定元素的标签名来进行定位。
- find_element_by_xpath(self, xpath) // 通过XML Path来定位,而在appium中,直接复制inspector中的XPath就可以了。绝对路径以/表示,相对路径则以//表示,当xpath的路径以/开头时,表示让Xpath解析引擎从文档的根节点开始解析。当xpath路径以//开头时,则表示让xpath引擎从文档的任意符合的元素节点开始进行解析。而当/出现在xpath路径中时,则表示寻找父节点的直接子节点,当//出现在xpath路径中时,表示寻找父节点下任意符合条件的子节点,不管嵌套了多少层级(这些下面都有例子,大家可以参照来试验)。
例如:想要点击TextField2输入框,调起键盘,可以通过以下几个方式:
self.driver.find_element_by_name("TextField2").click()
self.driver.find_element_by_xpath(" //UIAApplication[1]/UIAWindow[1]/UIATextField[2]/UIATextField[1]").click()
3、WebDriver事件触发
针对Element操作:
- click() //点击元素
- clear() //清除元素内容,比如清除输入框内的文本
- send_keys() //在元素上模拟按键输入
- submit() //提交表单
调用Element接口:
- get_attribute("name") //得到元素某个属性的内容,比如得到name、value等
- size() //元素大小
- text() //元素文本
4、Element条件判断
判断元素属性:
- is_displayed() //元素是否展示
- is_enable() //元素是否可用
- is_selected() //元素是否被选中
5、异常处理
1. try ... except ... 捕获异常
2. try ... finally ... 无论有无异常都要执行finally中的代码
3. self.assertEqual(value1, value2, failed info) 不相等时抛出异常
4. self.assertTrue(, failedinfo):断言value1 == value2
5. self.assertFalse(, failedinfo):断言value为真
6. self.assertRaises(ValueError, self.widget.resize, -1, -1) 异常
6、数据参数化
在测试过程中,有时会出现重复输入数据的情况,比如登陆,搜索。这时通过读取文件的数据来实现参数化。
创建loginData.txt文档,文档中每行写入一个 用户名和密码。然后通过sendkey()对输入框进行填充。
#-*- coding: utf8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
ReadFile = open(r"loginData.txt","r")
lines = ReadFile.readlines()
num=0
for line in lines:
key = unicode(line)
key1 = str(key)
name = key1.split()[0]
password=key1.split()[1]
num=num+1
print num,name,password