零.前提
首先atx对于UI的操作是基于wda的。
因此对应atx和wda来研究一下他们是如何获取UI的,又是如何对UI控件进行操作的。
哪些控件可以用哪些api进行操作。
一.ios_webdriveragent.py
1.启动关闭app
d.start_app("Buddle ID") #启动app
d.stop_app() #关闭app
2.链接状态
d.status()
{u'ios': {u'simulatorVersion': u'10.0.2'}, u'state': u'success', u'os': {u'version': u'10.0.2', u'name': u'iOS'}, u'build': {u'time': u'Oct 13 2016 10:27:46'}}
返回的是一个元组,我们可以获取任意值,如图:
3.获取屏幕尺寸
d.display #Get screen width and height
#属性函数(property) :http://python.jobbole.com/80955/
4.BundleID的获取
d.bundle_id
5.能取到session
s = d._session #发现app启动后,atx 调用wda接管session :self._session = self._wda.session(bundle_id)
#这样,我们就可以进一步操作session的一些东西了
demo:
s.window_size() #返回 Size(width=375, height=667)
6.屏幕尺寸比例
d.scale #屏幕: width/height
#作用:click函数调用这个函数来计算一个button的中心点,因为要点击在中心的坐标上
7.Rotation 屏幕方向(横屏 还是 竖屏)
d.Rotation #返回int型
设备会旋转,横屏1 竖屏0
源码:
#rs = dict(PORTRAIT=0, LANDSCAPE=1, UIA_DEVICE_ORIENTATION_LANDSCAPERIGHT=3)return
rs.get(self._session.orientation, 0)
8.d.click(x, y)
d.click(120, 424) #点击屏幕坐标点(x,y)
#python -m atx gui --serial http://100.80.29.124:8100 启动ATX 的 UI工具 ,获取坐标点
s = d._session # tap的坐标要做转换才能用,跟click的坐标要进行换算
s.tap(120, 424) #raw_size = self._session.window_size()
#self.__scale = min(self.display) / min(raw_size)rx, ry = x/self.__scale, y/self.__scale
9.home键
d.home()
d._wda.home()
10.截屏
d.screenshot("mm.png")
二.image.py
三.wda.py
1.selector介绍
self._base_url = base_url
self._text = unicode(text) if text else None
self._class_name = unicode(class_name) if class_name else None
self._xpath = unicode(xpath) if xpath else None
1.text获取控件
#查找滑动
d(text=u"发现城市特色酒店").scroll() #滑动直到找到value=“发现城市特色酒店”的地方
2.class_name获取控件
d(class_name="StaticText")[0].click()
3.xpath获取控件
d(xpath="//XCUIElementTypeButton[@label='lblseven']").click() #用@name也行
4.baseurl
暂时不知道有什么用
附录:
[wda支持元素类型]
xcui_element = [
'Any', 'Other', 'Application', 'Group', 'Window',
'Sheet', 'Drawer', 'Alert', 'Dialog', 'Button', 'RadioButton',
'RadioGroup', 'CheckBox', 'DisclosureTriangle', 'PopUpButton',
'ComboBox', 'MenuButton', 'ToolbarButton', 'Popover', 'Keyboard',
'Key', 'NavigationBar', 'TabBar', 'TabGroup', 'Toolbar', 'StatusBar',
'Table', 'TableRow', 'TableColumn', 'Outline', 'OutlineRow', 'Browser',
'CollectionView', 'Slider', 'PageIndicator', 'ProgressIndicator',
'ActivityIndicator', 'SegmentedControl', 'Picker', 'PickerWheel',
'Switch', 'Toggle', 'Link', 'Image', 'Icon', 'SearchField', 'ScrollView',
'ScrollBar', 'StaticText', 'TextField', 'SecureTextField', 'DatePicker',
'TextView', 'Menu', 'MenuItem', 'MenuBar', 'MenuBarItem', 'Map', 'WebView',
'IncrementArrow', 'DecrementArrow', 'Timeline', 'RatingIndicator',
'ValueIndicator', 'SplitGroup', 'Splitter', 'RelevanceIndicator',
'ColorWell', 'HelpTag', 'Matte', 'DockItem', 'Ruler', 'RulerMarker', 'Grid',
'LevelIndicator', 'Cell', 'LayoutArea', 'LayoutItem', 'Handle', 'Stepper', 'Tab'
]