1.send_keys

send_keys(self, *value):

Simulates typing into the element【在元素中模拟输入(开启appium自带的输入法并配置了appium输入法后,可以输入中英文)】

:Args:

- value - A string for typing, or setting form fields. For setting file inputs, this could be a local file path.

Use this to send simple key events or to fill out form fields::

form_textfield = driver.find_element_by_name('username')

form_textfield.send_keys("admin") This can also be used to set file inputs.

::

file_input = driver.find_element_by_name('profilePic')

file_input.send_keys("path/to/profilepic.gif")

# Generally it's better to wrap the file path in one of the methods

# in os.path to return the actual path to support cross OS testing.

# file_input.send_keys(os.path.abspath("path/to/profilepic.gif"))

用法:driver.element.send_keys(“中英”)

send_keys方法需要在配置Capabilities信息时打开模拟键盘unicodeKeyboard与resetKeyboard,如下面代码举例:

from appium import webdriver
import time
desired_caps = {
'platformName' : 'Android',
'deviceName' : '76P4C15813005463',
'platformVersion' : '5.1',
#测试apk包名
'appPackage' : 'com.huawei.android.launcher',
#测试apk的launcherActivity
'appActivity' : '.Launcher',
#打开模拟键盘
'unicodeKeyboard' : True ,
'resetKeyboard' : True,
}
#进入android系统launcher
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
time.sleep(5)
#进入应用市场
driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'应用市场)]").click()
#使用模拟键盘输入'今日头条'
driver.find_element_by_id('com.huawei.appmarket:id/search_edit_text_view').send_keys(u"今日头条")
driver.find_element_by_id('com.huawei.appmarket:id/search_icon_view').click()
time.sleep(5)
driver.quit()

2.find_element_by_id

 find_element_by_id(self, id_):

Finds element within this element's children by ID(通过元素的ID定位元素)

:Args: - id_ - ID of child element to locate.

用法 driver. find_element_by_id(“id”)

find_element_by_id方法,是对于那些有id而且可以互相区分的控件的操作使用,一般通过android sdk 的tools路径下的uiautomatorviewer.bat自带工具来获取,

使用这个工具首先要确保前面环境配置ok,然后确定测试机器或android模拟器处于连接状态(cmd上输入adb devices),下面是使用uiautomatorviewer.bat工具

获取id的步骤:

(1)在android-sdk\tools路径下找到uiautomatorviewer.bat工具,双击uiautomatorviewer.bat打开,如下图

(2)获取id,如下图所示,右边Node Detail的红色框内resource-id就是左边天气应用的id

代码举例:

#点击天气应用
driver.find_element_by_id('com.huawei.android.totemweather:id/mulan_widget_currentweather_smallicon').click()

3.find_element_by_xpath

 find_element_by_xpath(self, xpath):

Finds element by xpath(通过Xpath定位元素,详细方法可参阅http://www.w3school.com.cn/xpath/ )

:Args:

xpath - xpath of element to locate. "//input[@class='myelement']"

Note: The base path will be relative to this element's location.

This will select the first link under this element.

::

myelement.find_elements_by_xpath(".//a")

However, this will select the first link on the page.

::

myelement.find_elements_by_xpath("//a")

用法 find_element_by_xpath(“//*”)

find_element_by_xpath方法也需要使用uiautomatorviewer.bat工具来定位控件,如下图所示右边相机控件id为空,这时就需要使用xpath来定位元素了,

我们可以使用xpath用text和index来定位元素,如下图的就可以这样定位相机:

driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'相机')]")

driver.find_element_by_xpath("//android.widget.TextView[contains(@index,8)]")

如下图的图库那个控件index和天气温度控件是相同的,都是index=7,就只能用text或text与index结合了,如:

driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'图库')]")

driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'图库')and@index='7']")

上面的代码就可以这样写

# -*-coding=utf-8 -*-

from appium import webdriver
import time
desired_caps = {
'platformName' : 'Android',
'deviceName' : '76P4C15813005463',
'platformVersion' : '5.1',
#测试apk包名
'appPackage' : 'com.huawei.android.launcher',
#测试apk的launcherActivity
'appActivity' : '.Launcher',
}
#进入android系统launcher
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
time.sleep(5)
#从launcher主界面进入相机应用并退出的两种方法
driver.keyevent('3')
#xpath使用text定位控件
driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'相机')]").click()
time.sleep(2)
driver.keyevent('3')
time.sleep(2)
#xpath使用index定位控件
driver.find_element_by_xpath("//android.widget.TextView[contains(@index,8)]").click()
time.sleep(2)
driver.keyevent('3')
time.sleep(2) #从launcher主界面进入图库应用并退出的两种方法
#xpath使用text定位控件
driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'图库').click()
time.sleep(2)
driver.keyevent('3')
time.sleep(2)
#xpath使用text与index一起定位控件
driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'图库')and@index='7']").click()
time.sleep(5)
driver.keyevent('3')
time.sleep(2) driver.quit()

4. find_element_by_name

find_element_by_name(self, name):

Finds element within this element's children by name【通过元素Name定位(元素的名称属性text)】

:Args: - name - name property of the element to find.

用法: driver.find_element_by_name(“name”)

find_elements_by_name方法的控件元素也需要使用uiautomatorviewer.bat工具来定位,如上面例子中带有text信息的控件就可以直接使用,如

driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'相机')]")

driver.find_element_by_xpath("//android.widget.TextView[contains(@index,8)]")

可以使用

driver.find_element_by_name('相机')

脚本如下

from appium import webdriver
import time
desired_caps = {
'platformName' : 'Android',
'deviceName' : '76P4C15813005463',
'platformVersion' : '5.1',
#测试apk包名
'appPackage' : 'com.huawei.android.launcher',
#测试apk的launcherActivity
'appActivity' : '.Launcher',
}
#进入android系统launcher
driver = webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
time.sleep(5) #name方法进入相机应用
time.sleep(2)
driver.find_element_by_name("相机").click()
time.sleep(5) driver.quit()

5. find_element_by_class_name

find_element_by_class_name(self, name):

Finds element within this element's children by class name(通过元素class name属性定位元素 )

:Args: - name - class name to search for.

用法 driver. find_element_by_class_name(“android.widget.LinearLayout”)

find_element_by_class_name方法其实很不实用,一般控件的class基本相同,如下图上面的应用控件class都是android.widget.TextView,所以不好区分元素。

6.tap

 tap(self, positions, duration=None):

Taps on an particular place with up to five fingers, holding for a certain time 【模拟手指点击(最多五个手指),可设置按住时间长度(毫秒)】

:Args:

- positions - an array of tuples representing the x/y coordinates of the fingers to tap. Length can be up to five.

- duration - (optional) length of time to tap, in ms

:Usage: driver.tap([(100, 20), (100, 60), (100, 100)], 500)

用法 driver.tap([(x,y),(x1,y1)],500)

当控件无法获取时,那我们就可以使用坐标用tap方法做点击操作,而且tap方法可以用于多点点击。

1
driver.tap([(300,500)],10)

 

7.zoom

 zoom(self, element=None, percent=200, steps=50):

Zooms in on an element a certain amount (在元素上执行放大操作)

:Args:

- element - the element to zoom

- percent - (optional) amount to zoom. Defaults to 200%

- steps - (optional) number of steps in the zoom action

:Usage: driver.zoom(element)

用法 driver.zoom(element)

zoom方法用来模拟手机上的放大操作,主要是要确定element,具体例子和下面pinch方法一起讲。

el=driver.find_element_by_class_name('android.widget.RelativeLayout')
driver.zoom(el,150,30) #percent参数和steps可以不写,不写保持默认数值

8.pinch

 pinch(self, element=None, percent=200, steps=50):

Pinch on an element a certain amount 在元素上执行模拟双指捏(缩小操作)

:Args:

- element - the element to pinch

- percent - (optional) amount to pinch. Defaults to 200%

- steps - (optional) number of steps in the pinch action

:Usage: driver.pinch(element)

用法 driver.pinch(element)

pinch方法用来模拟手机上的缩小操作,主要是要确定element,下面举例进入图库查看图片时放大和缩小图片,使用uiautomatorviewer.bat工具来定位元素。

(1)进入图库,如下图所示,图库控件text是唯一的,所以我们采用by_name方法获取元素。

driver.find_element_by_name('图库')

(2)选择图库的一个文件夹,如下图所示,选择杂志锁屏,由于该元素text也是唯一的,所以使用by_name方法获取控件元素。

driver.find_element_by_name('杂志锁屏')

(3)选择一张图片,所下图所示,下面图片是一个整的布局,没有单独分开的控件元素,所以我们只能选择使用tap方法点击屏幕。

driver.tap([(300,500)],50)

(4)放大和缩小图片,如下图所示,整个图片是一个布局,而且只有class信息,由于放大和缩小需要获得element,所以我们使用class_name的

方法获取整个布局作为元素。

el=driver.find_element_by_class_name('android.widget.RelativeLayout')

driver.zoom(el)

driver.pinch(el,200,50)

上面操作的具体脚本如下

from appium import webdriver
import time
desired_caps = {
'platformName' : 'Android',
'deviceName' : '76P4C15813005463',
'platformVersion' : '5.1',
#测试apk包名
'appPackage' : 'com.huawei.android.launcher',
#测试apk的launcherActivity
'appActivity' : '.Launcher',
}
#进入android系统launcher
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
time.sleep(5)
#进入图库
driver.find_element_by_name('图库').click()
driver.find_element_by_name('杂志锁屏').click()
driver.tap([(300,500)],50)
time.sleep(1)
el=driver.find_element_by_class_name('android.widget.RelativeLayout')
#放大图片
driver.zoom(el)
time.sleep(5)
#缩小图片
driver.pinch(el,200,50)
time.sleep(5)
driver.quit()

APPIUM 常用API介绍(3)的更多相关文章

  1. appium 常用api介绍(2)

    前言:接着上一篇继续讲常用的一些api 参考博文:http://blog.csdn.net/bear_w/article/details/50330565 1.send_keys send_keys( ...

  2. appium 常用api介绍(1)

    前言:android手机大家都很熟悉,操作有按键.触摸.点击.滑动等,各种操作方法可以通过api的方法来实现. 参考博文:http://blog.csdn.net/bear_w/article/det ...

  3. 7、Appium常用API

    嗯,官网已经介绍的很全了.会选几个常用API后期整理. Appium常用API地址:http://appium.io/docs/cn/writing-running-appium/appium-bin ...

  4. Appium常用API(二)

    接前面的常用API(一),本文接着介绍如下: 1.press_keycode press_keycode(self, keycode, metastate=None): Sends a keycode ...

  5. 小程序常用API介绍

    小程序常用API接口  wx.request https网络请求 wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 method:"GET&qu ...

  6. appium 常用API使用总结!

    将常用函数进行适用总结,后期在使用的过程中直接查找调用即可 获取界面属性.控件属性 1.current_activity:获取activity名称 device.current_activity 2. ...

  7. Appium常用API(一)

    Appium作为当下一款移动应用的自动化测试工具,对于测试来说重要性不言可寓,废话不多说,下面总结下它常用的API: 1.contextscontexts(self): Returns the con ...

  8. appium 常用API

    ''.appium api第二弹 锋利的python,这是初稿,2015/1/5 如有错误的地方,请同学们进行留言,我会及时予以修改,尽量整合一份ok的api 作者:Mads Spiral QQ:79 ...

  9. Splinter常用API介绍(转)

    # Example from splinter import Browser with Browser() as browser: # Visit URL url = "http://www ...

随机推荐

  1. 【西北师大-2108Java】第三次作业成绩汇总

    [西北师大-2108Java]第三次作业成绩汇总 熟悉PTA平台线上测试环境: 理解用户自定义类的定义: 掌握对象的声明: 学会使用构造函数初始化对象: 使用类属性与方法的使用掌握使用: 掌握pack ...

  2. 【2019.7.20 NOIP模拟赛 T2】B(B)(数位DP)

    数位\(DP\) 首先考虑二进制数\(G(i)\)的一些性质: \(G(i)\)不可能有连续两位第\(x\)位和第\(x+1\)位都是\(1\).因为这样就可以进位到第\(x+2\)位.其余情况下,这 ...

  3. ORB-SLAM2 地图加载

    一.前面说了ORB-SLAM地图的保存部分,继续说地图如何加载,因为加载部分相比保存要稍微复杂一些,所以要多说一点. 二.ORB-SLAM2地图加载构成 首先同样是在头文件中声明加载函数,包含地图点和 ...

  4. Docker入门之安装与使用

    1. 安装(windows) win7.win8以及win10家庭版 等需要利用 docker toolbox 来安装,国内可以使用阿里云的镜像来下载,下载地址:http://mirrors.aliy ...

  5. zlib压缩相关

    相关原理 deflate(RFC1951):一种压缩算法,使用LZ77和哈弗曼进行编码: zlib(RFC1950):一种格式,是对deflate进行了简单的封装,他也是一个实现库(delphi中有z ...

  6. Web端即时通讯基础知识补课:一文搞懂跨域的所有问题!

    本文原作者: Wizey,作者博客:http://wenshixin.gitee.io,即时通讯网收录时有改动,感谢原作者的无私分享. 1.引言 典型的Web端即时通讯技术应用场景,主要有以下两种形式 ...

  7. vulnhub之GoldenEye-v1靶机

    靶机:virtualbox  自动获取 攻击:kali linux    自动获取 设置同一张网卡开启dhcp ifconfig攻击IP是那个网段(也可以netdiscpver,不过毕竟是自己玩懒得等 ...

  8. Freemarker入门Demo

    1:工程引入依赖 <dependency> <groupId>org.freemarker</groupId> <artifactId>freemark ...

  9. MySQL使用crontab定时备份不执行问题

    在使用crontab定时备份数据库时,发现并没有执行备份命令. 下面是定时备份的代码: 30 1 * * * /usr/local/mysql/bin/mysqldump --defaults-ext ...

  10. IDA分析时添加新的C语言结构体

    View - Open Subviews - Local Type - INSERT键 - 输入新结构体 - 右击"Synchornize to idb" 之后再分析处按 T 就可 ...