wda源码简读

零.前提

首先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'}}
  返回的是一个元组,我们可以获取任意值,如图:
Paste_Image.png
3.获取屏幕尺寸
  d.display          #Get screen width and height
                     #属性函数(property) :http://python.jobbole.com/80955/
wda源码简读_第1张图片
Paste_Image.png
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'
]

你可能感兴趣的:(wda源码简读)