appium-- 页面元素抓取

1. 到sdkmanger 路径下 run : uiautomator.

2. 启动被测应用程序。

3. 获取该应用程序的当前页面。

4. 常见的定位方式:

driver.findElementByName: text属性

driver.findElementById: sourceID属性

driver.findElementByXPath: 具有一定约束的路径抽象标示, 基于XPath方式

 

系统按键事件

 

 

 press_keycode(AndroidKeyCode)//发送按键事件

 

例如:点击home键,home键的KeyCode是3

 

driver.press_keycode(3)

 

 

 

键名                  描述       键值
KEYCODE_CALL        拨号键     5
KEYCODE_ENDCALL     挂机键     6
KEYCODE_HOME        按键Home      3
KEYCODE_MENU        菜单键     82
KEYCODE_BACK        返回键     4
KEYCODE_SEARCH      搜索键     84
KEYCODE_CAMERA      拍照键     27
KEYCODE_FOCUS       拍照对焦键   80
KEYCODE_POWER       电源键     26
KEYCODE_NOTIFICATION 通知键        83
KEYCODE_MUTE        话筒静音键   91
KEYCODE_VOLUME_MUTE 扬声器静音键  164
KEYCODE_VOLUME_UP   音量增加键   24
KEYCODE_VOLUME_DOWN 音量减小键   25
 

 

更多KeyCode可以查看下面的博客:

 

 

 

 

 

 

driver的一些比较重要操作

 

 

 

1.reset()

 

//重置app

 

这时候driver会重置,相当于卸载重装应用。所以本地缓存会失效

 

driver.reset()

 

 

 

2.start_activity(包名,activity名)

 

//启动app的某一个activity

 

例如:driver.start_activity("com.wuba.zhuanzhuan","./presentation.view.activity.LaunchActivity")

 

 

 

启动一个activity,这个activity必须是AndroidManifest.xml中有intent-filter的activity

 

<intent-filter>
    <action android:name="android.intent.action.MAIN"/>
   <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
 

 

这种启动activity和driver的reset()不同的是

 

 

 

3.contexts

 

//获得所有contexts

 

driver.contexts

 

 

 

结果如下:

 

['NATIVE_APP', 'WEBVIEW_com.android.browser']

 

 

 

NATIVE_APP:native的context

 

WEBVIEW_com.android.browser:webview的context,存放html的容器

 

 

 

4.current_context

 

//查看当前的context

 

driver.current_context

 

 

 

5.switch_to.context(context名)

 

//切换context

 

driver.switch_to.context("WEBVIEW_com.wuba.zhuanzhuan")

 

 

 

NATIVE时不能定位WEBVIEW的内容,在WEBVIEW的context时不能定位NATIVE的内容。

 

所以需要切换到对应的context中去进行操作

 

 

 

6.setNetworkConnection(bitmask掩码)

 

//设置网络类型

 

例如:设置网络类型为只开wifi

 

driver.set_network_connection(2)

 

 

 

网络的bitmask掩码如下:

 

| 值 (别名)           | 数据连接 | Wifi 连接 | 飞行模式 |

 

| ------------------ | ---- | ---- | ------------- |

 

| 0 (什么都没有)       | 0    | 0    | 0 |

 

| 1 (飞行模式)         | 0    | 0    | 1 |

 

| 2 (只有Wifi)        | 0    | 1    | 0 |

 

| 4 (只有数据连接)     | 1    | 0    | 0 |

 

| 6 (开启所有网络)     | 1    | 1    | 0 |

 

 

 

 
7.scroll(起始元素,结束元素)
driver.scroll(origin_el,destination_el)
 
8.获得当前页面的所有元素
driver.page_source
 
这可以用来判断元素是否存在,例如assert "发布成功" in driver.page_source)
 

 

9.补充一些driver启动时可能用到的项

 

其实这些在上一篇启动里都有介绍,但是有些可能大家没注意到的点再列一下。这些点也是我在测试中实际遇到的点

 

 

 

autoLaunch :Appium是否要自动启动或安装app,默认true

 

desired_caps['autoLaunch'] = 'false'

 

有的时候我不想让appium每次都启动app,想自己去启动activity,那这个项这时就可以起作用了

 

 

 

noReset:在会话前是否重置app状态。默认是false

 

desired_caps['noReset'] = 'true'

 

 

 

newCommandTimeout:设置未接收到新命令的超时时间,默认60s

 

如果60s内没有接收到新命令,appium会自动断开连接,如果我需要很长时间做driver之外的操作,可能延长接收新命令的超时时间

 

desired_caps["newCommandTimeout"]=1800

 

posted @ 2017-05-17 16:32  judygod  阅读(5256)  评论(0编辑  收藏  举报