书接上文,我们讲到了录制脚本,这节来聊聊自己手动写脚本
上文中我们看到,录制的脚本中使用坐标来操作界面,这样会遇到一个问题,比如actionSheet,alert,或者其他自定义的视图(效果如模态视图),操作会出现相应异常
此时,我们就可以使用第二种方式来进行操作
1 通过appium中的appSource查找你所要操作的元素
然后右侧SelectedElement中可以看到FindBy 和Selector
btn=driver.find_element_by_xpath("//XCUIElementTypeButton[@name='home dt']")
btn=driver.find_element_by_accessibility_id('home dt')
#这俩是等效操作
btn.click()
btn=driver.find_element_by_xpath("//XCUIElementTypeButton[@name='home dt']")
btn=driver.find_element_by_accessibility_id('home dt')
接下来我们再来一种方式
noidea=driver.find_element_by_ios_predicate("value CONTAINS '123456'")
'123456' 是在Xcode中设置好的UITextView的 accessibilityValue属性
这里就建议iOSer开发过程中,可以配置这些参数,以供后续自动化测试使用
mytextView.accessibilityValue = @"123456";
使用Predicate定位,可支持元素的单个属性和多个属性定位,强烈推荐的一种方式
常用的有下面方式
- 普通的比较运算符
<、>、==、<=、>=、!=
支持数字和文字的对比,如下
driver.find_element_by_ios_predicate("value>100")
driver.find_element_by_ios_predicate("value=='123456'")
- 字符串相关:LIKE
?代表一个字符,*代表多个字符,使用方式如下
driver.find_element_by_ios_predicate("value LIKE '123?56'")
driver.find_element_by_ios_predicate("value LIKE '12???6'")
driver.find_element_by_ios_predicate("value LIKE '1*6'")
- 字符串相关:CONTAINS、BEGINSWITH、ENDSWITH
driver.find_element_by_ios_predicate("value CONTAINS '123456'")
driver.find_element_by_ios_predicate("value CONTAINS '123'")
driver.find_element_by_ios_predicate("value CONTAINS '456'")
- 多条件定位
driver.find_element_by_ios_predicate("type == 'XCUIElementTypeTextView' AND value LIKE '1*6'")