189 8069 5689

python中Appium怎么用

这篇文章主要介绍了python中Appium怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

创新互联建站不只是一家网站建设的网络公司;我们对营销、技术、服务都有自己独特见解,公司采取“创意+综合+营销”一体化的方式为您提供更专业的服务!我们经历的每一步也许不一定是最完美的,但每一步都有值得深思的意义。我们珍视每一份信任,关注我们的成都网站设计、成都做网站、外贸网站建设质量和服务品质,在得到用户满意的同时,也能得到同行业的专业认可,能够为行业创新发展助力。未来将继续专注于技术创新,服务升级,满足企业一站式营销型网站建设需求,让再小的品牌网站设计也能产生价值!

Appium
Appium 服务关键字
关键字 描述  实例  
automationName  你想使用的自动化测试引擎    Appium (默认) 或 Selendroid    
platformName    你要测试的手机操作系统 iOS, Android, 或 FirefoxOS   
platformVersion 手机操作系统版本    例如: 7.1, 4.4    
deviceName  使用的手机类型或模拟器类型   iPhone Simulator, iPad Simulator, iPhone Retina 4-inch, Android Emulator, Galaxy S4, 等。在 iOS 上,这个关键字的值必须是使用 instruments -s devices 得到的可使用的设备名称之一。在 Android 上,这个关键字目前不起作用。   
app .ipa or .apk文件所在的本地绝对路径或者远程路径,也可以是一个包括两者之一的.zip。 Appium会先尝试安装路径对应的应用在适当的真机或模拟器上。针对Android系统,如果你指定app-package和app-activity(具体见下面)的话,那么就可以不指定app。 会与 browserName 冲突   比如/abs/path/to/my.apk或http://myapp.com/app.ipa  
browserName 需要进行自动化测试的手机 web 浏览器名称。如果是对应用进行自动化测试,这个关键字的值应为空。    iOS 系统上可以用 'Safari' ,Android 系统上可以用 'Chrome', 'Chromium', 或 'Browser'。  
newCommandTimeout   设置命令超时时间,单位:秒。达到超时时间仍未接收到新的命令时 Appium 会假设客户端退出然后自动结束会话。 比如 60   
autoLaunch  Appium是否需要自动安装和启动应用。默认值true true, false 
language    (Sim/Emu-only) 设定模拟器 ( simulator / emulator ) 的语言。  如: fr   
locale  (Sim/Emu-only) 设定模拟器 ( simulator / emulator ) 的区域设置。    如: fr_CA    
udid    连接的物理设备的唯一设备标识  如: 1ae203187fc012g  
orientation (Sim/Emu-only) 在一个设定的方向模式中开始测试  LANDSCAPE (横向) 或 PORTRAIT (纵向)  
autoWebview 直接转换到 WebView 上下文。 默认值 false、   true, false 
noReset 不要在会话前重置应用状态。默认值false。  true, false 
fullReset   (iOS) 删除整个模拟器目录。(Android) 通过卸载——而不是清空数据——来重置应用状态。在 Android 上,这也会在会话结束后自动清除被测应用。默认值 false    true, false 
 
Android特有
关键字 描述  实例
appActivity 你要从你的应用包中启动的 Android Activity 名称。它通常需要在前面添加 . (如:使用.MainActivity 而不是 MainActivity)  MainActivity, .Settings
appPackage  你想运行的Android应用的包名   比如com.example.android.myApp, com.android.settings
appWaitActivity 你想要等待启动的 Android Activity 名称    SplashActivity
deviceReadyTimeout  设置等待一个模拟器或真机准备就绪的超时时间   5
androidCoverage 用于执行测试的 instrumentation 类。作为命令 adb shell am instrument -e coverage true -w 的-w 参数。  com.my.Pkg/com.my.Pkg.instrumentation.MyInstrumentation
enablePerformanceLogging    (仅适用于 Chrome 和 webview) 开启 Chromedriver 的性能日志。 (默认 false)   true, false
androidDeviceReadyTimeout   等待设备在启动应用后准备就绪的超时时间。以秒为单位。  如 30
androidDeviceSocket 开发工具的 socket 名称。只有在被测应用是一个使用 Chromium 内核的浏览器时需要。 socket 会被浏览器打开,然后 Chromedriver 把它作为开发者工具来进行连接。 如 chrome_devtools_remote
avd 需要启动的 AVD (安卓虚拟设备) 名称。  如 api19
avdLaunchTimeout    以毫秒为单位,等待 AVD 启动并连接到 ADB 的超时时间。(默认值120000)  300000
avdReadyTimeout 以毫秒为单位,等待 AVD 完成启动动画的超时时间。(默认值 120000)  300000
avdArgs 启动 AVD 时需要加入的额外的参数。 如 -netfast
useKeystore 使用一个自定义的 keystore 来对 apk 进行重签名。默认值 false    true or false
keystorePath    自定义 keystore 的路径。默认: ~/.android/debug.keystore  如 /path/to.keystore
keystorePassword    自定义 keystore 的密码。   如 foo
keyAlias    key 的别名 如 androiddebugkey
keyPassword key 的密码 如 foo
chromedriverExecutable  webdriver 可执行文件的绝对路径 (如果 Chromium 核心提供了对应的 webdriver, 应该用它代替 Appium 自带的 webdriver)  /abs/path/to/webdriver
autoWebviewTimeout  以毫秒为单位,等待 Webview 上下文激活的时间。默认值 2000 如 4
intentAction    用于启动 activity 的 intent action。 (默认值android.intent.action.MAIN)  如 android.intent.action.MAIN,android.intent.action.VIEW
intentCategory  用于启动 activity 的 intent category。 (默认值android.intent.category.LAUNCHER)  如 android.intent.category.LAUNCHER,android.intent.category.APP_CONTACTS
intentFlags 用于启动 activity 的标识 ( flags ) (默认值 0x10200000)    如 0x10200000
optionalIntentArguments 用于启动 activity 的额外 intent 参数。请查看 Intent 参数   如 --esn , --ez  
stopAppOnReset  在使用 adb 启动应用前停止被测应用的进程 ( process ) 。如果被测应用是被另一个应用创建的,当这个参数被设定为 false 时,允许另一个应用的进程在使用 adb 启动被测应用时继续存活。默认值 true   true 或 false
unicodeKeyboard 使用 Unicode 输入法。默认值false true 或 false
resetKeyboard   在设定了 unicodeKeyboard 关键字的 Unicode 测试结束后,重置输入法到原有状态。如果单独使用,将会被忽略。默认值 false   true 或 false
noSign  跳过检查和对应用进行 debug 签名的步骤。只能在使用 UiAutomator 时使用,使用 selendroid 是不行。默认值 false    true 或 false
ignoreUnimportantViews  调用 uiautomator 的函数setCompressedLayoutHierarchy()。由于 Accessibility 命令在忽略部分元素的情况下执行速度会加快,这个关键字能加快测试执行的速度。被忽略的元素将不能够被找到,因此这个关键字同时也被实现成可以随时改变的 *设置 ( settings ) * 。默认值 false    true 或 false

 
iOS特有
关键字 描述  实例
calendarFormat  (Sim-only) 为iOS的模拟器设置日历格式   如 gregorian (公历)
bundleId    被测应用的 bundle ID 。用于在真实设备中启动测试,也用于使用其他需要 bundle ID 的关键字启动测试。在使用 bundle ID 在真实设备上执行测试时,你可以不提供 app 关键字,但你必须提供 udid 。   如 io.appium.TestApp
udid    连接的真实设备的唯一设备编号 ( Unique device identifier ) 如 1ae203187fc012g
launchTimeout   以毫秒为单位,在 Appium 运行失败之前设置一个等待 instruments 的时间    比如: 20000
locationServicesEnabled (Sim-only) 强制打开或关闭定位服务。默认值是保持当前模拟器的设定   true 或 false
locationServicesAuthorized  (Sim-only) 通过修改 plist 文件设定是否允许应用使用定位服务,从而避免定位服务的警告出现。默认值是保持当前模拟器的设定。请注意在使用这个关键字时,你同时需要使用 bundleId 关键字来发送你的应用的 bundle ID。    true 或者 false
autoAcceptAlerts    当 iOS 的个人信息访问警告 (如 位置、联系人、图片) 出现时,自动选择接受( Accept )。默认值 false。   true 或者 false
autoDismissAlerts   当 iOS 的个人信息访问警告 (如 位置、联系人、图片) 出现时,自动选择不接受( Dismiss )。默认值false。  true 或者 false
nativeInstrumentsLib    使用原生 intruments 库 (即关闭 instruments-without-delay )  true 或者 false
nativeWebTap    (Sim-only) 在Safari中允许"真实的",非基于 javascript 的 web 点击 (tap) 。 默认值: false。注意:取决于 viewport 大小/比例, 点击操作不一定能精确地点中对应的元素。    true 或者 false
safariInitialUrl    (Sim-only) (>= 8.1) 初始化 safari 的时使用的地址。默认是一个本地的欢迎页面 如https://www.github.com
safariAllowPopups   (Sim-only) 允许 javascript 在 Safari 中创建新窗口。默认保持模拟器当前设置。   true 或者 false
safariIgnoreFraudWarning    (Sim-only) 阻止 Safari 显示此网站可能存在风险的警告。默认保持浏览器当前设置。    true 或者 false
safariOpenLinksInBackground (Sim-only) Safari 是否允许链接在新窗口打开。默认保持浏览器当前设置。 true 或者 false
keepKeyChains   (Sim-only) 当 Appium 会话开始/结束时是否保留存放密码存放记录 (keychains) (库(Library)/钥匙串(Keychains))    true 或者 false
localizableStringsDir   从哪里查找本地化字符串。默认值 en.lproj    en.lproj
processArguments    通过 instruments 传递到 AUT 的参数  如 -myflag
interKeyDelay   以毫秒为单位,按下每一个按键之间的延迟时间。  如 100
showIOSLog  是否在 Appium 的日志中显示设备的日志。默认值false true 或者 false
sendKeyStrategy 输入文字到文字框的策略。模拟器默认值:oneByOne(一个接着一个) 。真实设备默认值:grouped (分组输入) oneByOne, grouped 或setValue
screenshotWaitTimeout   以秒为单位,生成屏幕截图的最长等待时间。默认值: 10。    如 5
waitForAppScript    用于判断 "应用是否被启动” 的 iOS 自动化脚本代码。默认情况下系统等待直到页面内容非空。结果必须是布尔类型。   例如 true;,target.elements().length > 0;, $.delay(5000); true;

Webview

1、通过driver.page_source找源码

2、通过chrome浏览器,×××
chrome://inspect/#devices

获取webview的源代码,需要×××

定位方式
Id定位

通过全名称
person_center_id_1 = driver.find_element_by_id("com.xsteach.appedu:id/content_rb_mine")
person_center_id_1.click()

通过部分名称  
person_center_id_2 = driver.find_element_by_id("content_rb_mine")
person_center_id_2.click()

class_name定位    

1、class_name 唯一存在

#定位搜索框,通过class_name
search_box = driver.find_element_by_class_name("android.widget.RelativeLayout")

2、class_name 和其他元素重复
比如底部的几个元素都是同一个class_name,但是index索引不一样,从0开始
定位方式1:

需要注意,此种写法和ui automator viewer给的索引不一样,是从1开始
home_page = driver.find_element_by_xpath("//*[@class='android.widget.RadioButton'][1]")

定位方式2:

此处定位表达式的index取自ui automator viewer
category =  driver.find_element_by_xpath("//*[@class='android.widget.RadioButton' and @index=1]")

定位方式3:
Uiautomator通过uiautomator定位,返回的是一列表,下标从0开始

my_course = driver.find_elements_by_android_uiautomator('new UiSelector().className("android.widget.RadioButton")')[2]

xpath定位
需要注意,此种写法和ui automator viewer给的索引不一样,是从1开始
home_page = driver.find_element_by_xpath("//*[@class='android.widget.RadioButton'][1]")

text定位
需要使用uiautomator的定位方式
1、匹配全部文本

find_elements_by_android_uiautomator返回的是一个列表需要取第一元素

#个人中心
p_center = driver.find_elements_by_android_uiautomator('new UiSelector().text("个人中心")')[0]

也可以使用find_element_by_android_uiautomator返回的是单个元素

#分类
category = driver.find_element_by_android_uiautomator('new UiSelector().text("分类")')

2、匹配部分文本
#社区

area = driver.find_element_by_android_uiautomator('new UiSelector().textContains("社")')
area.click()
time.sleep(3)

3、正则匹配文本

#我的课程
course = driver.find_element_by_android_uiautomator('new UiSelector().textMatches(".*课程.*")')
course.click()
time.sleep(3)

css_selector定位(webview)
只适用于webview的html页面,继承自webdriver,与pc版本的UI测试一致
driver.find_element_by_css_selector()



用id
driver.find_element_by_css_selector("input#kw")
driver.find_element_by_css_selector("input[id=kw]")

通过link_text定位(webview)
只适用于webview容器中的html页面,继承自webdriver,与pc版本的UI测试一致
driver.find_element_by_link_text()

通过name定位
web view容器中的html页面可以用name定位,native并没有name属性
driver.find_element_by_name()

hao123

driver.find_element_by_name("tj_trhao123")

find_element(by,value)
find_element_by_方式(value)实际调用的都是find_element(by,value)
需要导入这个包:
from selenium.webdriver.common.by import By

例如:定位id为ag2的元素
方式一:
driver.find_element_by_id("ag2”)
driver.find_element_by_id("content_rb_bbs”)

方式二:
driver.find_element(By.ID,"ag2")
driver.find_element(By.ID,"content_rb_bbs")

这个操作的好处是可以直接把操作的by和value放到一个元组里,然后调用通用方法来传参获得元素结果
cateid=(By.ID,"ag2")
driver.find_element(*cateid).click()

用find_element()方法定位,两个参数 第一个参数是定位的类型由By指定,第二个参数是具体的定位值;

传入两个个参数不需要是元组

driver.find_element(By.ID,"kw")

driver.find_element(By.XPATH,'//input[@id="kw"]')

driver.find_element(By.NAME,"tj_trhao123")

driver.find_element(By.CLASS_NAME,"s_ipt")

driver.find_element(By.TAG_NAME,"input")

driver.find_element(By.LINK_TEXT,"hao123").click()

driver.find_element(By.PARTIAL_LINK_TEXT,"hao123")

driver.find_element(By.CSS_SELECTOR,"input#kw")

find_elements_by_定位方式(value)
返回的是一个列表,需要通过下标获取对应元素对象

driver.find_elements_by_id()
driver.find_elements_by_class_name()
driver.find_elements_by_android_uiautomator()

find_elements(by,value)
同样返回
find_elements(By.ID,”XXXX”)

定位元素顺序:
1、Id
2、class_name,如重复结合index
3、Uiautomator,可定位text等
4、xpath

常用API
点击click
pm = driver.find_elements_by_id("com.xsteach.appedu:id/rlItemView")[1]
pm.click()

清空clear()
userName = driver.find_element_by_id("etUser")
userName.clear()

输入文本send_keys()
userName = driver.find_element_by_id("etUser")
userName.send_keys(“xxx”)

左右上下滑动
'''左滑'''
x = driver.get_window_size()['width']
y = driver.get_window_size()['height']
driver.swipe(x*3/4,y/4,x/4,y/4)

'''右滑'''
x = driver.get_window_size()['width']
y = driver.get_window_size()['height']
driver.swipe(x/4,y/4,x*3/4,y/4)

'''下滑'''
x = driver.get_window_size()['width']
y = driver.get_window_size()['height']
driver.swipe(x/2,y*3/4,x/2,y/4)

'''上滑'''
x = driver.get_window_size()['width']
y = driver.get_window_size()['height']
driver.swipe(x/2,y/4,x/2,y*3/4)
滑动界面
from appium.webdriver.common.touch_action import TouchAction
def test_scroll_down(driver):
    screen = driver.get_window_size()
    action = TouchAction(driver)
    action.press(x=screen['width']/2,y=screen['height']/2)
    action.move_to(x=0,y=-screen['height']/10)
    action.release()
    action.perform()

获取界面属性,控件属性
1)获取当前Activity名称
activity = driver.current_activity

2)获取屏幕宽高
screen = driver.get_window_size()

3)获取控件文本
mobile_name.get_attribute('text') 
mobile_name.text

4)获取控件类名
mobile_name.get_attribute('className')

5)判断控件是否显示
mobile_name.is_displayed() 
mobile_name.get_attribute('displayed')

6)获得控件位置
mobile_name.location

7)获得控件大小mobile_name.size

8)查找控件子结点

   需要先获取节点元素parent,然后获取对应的子节点

parent.find_elements_by_class_name('android.widget.TextView')

截屏
driver.get_screenshot_as_file(file_path)

断言源码内容

assert "平面广告设计付款专用链接1" in driver.page_source

#获取当前Activity的名称
activity = driver.current_activity
print(activity)

#获取屏幕高度、宽度
size = driver.get_window_size()
print(size)

#获取平面设计元素
pm = driver.find_elements_by_id("com.xsteach.appedu:id/rlItemView")[1]
print("文本:",pm.get_attribute('text'))
print("文本:",pm.text)
print("类名:",pm.get_attribute('className'))
print("控件是否显示:",pm.is_displayed())
print("控件是否显示:",pm.get_attribute("displayed"))
print("控件位置:",pm.location)
print("控件大小:",pm.size)

children = pm.find_elements_by_id("com.xsteach.appedu:id/iv_tag")
print(children)

pm.click()
time.sleep(5)

assert "平面广告设计付款专用链接1" in driver.page_source

file_path = "e:\\" + time.strftime("%Y-%m-%d") + ".png"

driver.get_screenshot_as_file(file_path)

关闭driver 
driver.quit()
注意:一定要记得关闭driver, 否则下次连接的时候可能会出异常,因为Appium以为你上次未关闭,会创建Session失败。
关闭app
driver.close_app()

模拟点击返回键
模拟操作系统的返回键

driver.press_keycode(4)
其中按钮的定义,由Android里的KeyEvent.java里定义的,所以其它的Android按钮也是支持的。

#获取平面设计元素
pm = driver.find_elements_by_id("com.xsteach.appedu:id/rlItemView")[1]

pm.click()
time.sleep(5)

assert "平面广告设计付款专用链接1" in driver.page_source

driver.press_keycode(4)

手机键盘事件的操作
两个函数可用
driver.keyevent()
driver.press_keycode(4)

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_ENTER 回车键 66 
KEYCODE_ESCAPE ESC键 111 
KEYCODE_DPAD_CENTER 导航键 确定键 23 
KEYCODE_DPAD_UP 导航键 向上 19 
KEYCODE_DPAD_DOWN 导航键 向下 20 
KEYCODE_DPAD_LEFT 导航键 向左 21 
KEYCODE_DPAD_RIGHT 导航键 向右 22 
KEYCODE_MOVE_HOME 光标移动到开始键 122 
KEYCODE_MOVE_END 光标移动到末尾键 123 
KEYCODE_PAGE_UP 向上翻页键 92 
KEYCODE_PAGE_DOWN 向下翻页键 93 
KEYCODE_DEL 退格键 67 
KEYCODE_FORWARD_DEL 删除键 112 
KEYCODE_INSERT 插入键 124 
KEYCODE_TAB Tab键 61 
KEYCODE_NUM_LOCK 小键盘锁 143 
KEYCODE_CAPS_LOCK 大写锁定键 115 
KEYCODE_BREAK Break/Pause键 121 
KEYCODE_SCROLL_LOCK 滚动锁定键 116 
KEYCODE_ZOOM_IN 放大键 168 
KEYCODE_ZOOM_OUT 缩小键 169

组合键

KEYCODE_ALT_LEFT Alt+Left 
KEYCODE_ALT_RIGHT Alt+Right 
KEYCODE_CTRL_LEFT Control+Left 
KEYCODE_CTRL_RIGHT Control+Right 
KEYCODE_SHIFT_LEFT Shift+Left 
KEYCODE_SHIFT_RIGHT Shift+Right

基本

KEYCODE_0 按键’0’ 7 
KEYCODE_1 按键’1’ 8 
KEYCODE_2 按键’2’ 9 
KEYCODE_3 按键’3’ 10 
KEYCODE_4 按键’4’ 11 
KEYCODE_5 按键’5’ 12 
KEYCODE_6 按键’6’ 13 
KEYCODE_7 按键’7’ 14 
KEYCODE_8 按键’8’ 15 
KEYCODE_9 按键’9’ 16 
KEYCODE_A 按键’A’ 29 
KEYCODE_B 按键’B’ 30 
KEYCODE_C 按键’C’ 31 
KEYCODE_D 按键’D’ 32 
KEYCODE_E 按键’E’ 33 
KEYCODE_F 按键’F’ 34 
KEYCODE_G 按键’G’ 35 
KEYCODE_H 按键’H’ 36 
KEYCODE_I 按键’I’ 37 
KEYCODE_J 按键’J’ 38 
KEYCODE_K 按键’K’ 39 
KEYCODE_L 按键’L’ 40 
KEYCODE_M 按键’M’ 41 
KEYCODE_N 按键’N’ 42 
KEYCODE_O 按键’O’ 43 
KEYCODE_P 按键’P’ 44 
KEYCODE_Q 按键’Q’ 45 
KEYCODE_R 按键’R’ 46 
KEYCODE_S 按键’S’ 47 
KEYCODE_T 按键’T’ 48 
KEYCODE_U 按键’U’ 49 
KEYCODE_V 按键’V’ 50 
KEYCODE_W 按键’W’ 51 
KEYCODE_X 按键’X’ 52 
KEYCODE_Y 按键’Y’ 53 
KEYCODE_Z 按键’Z’ 54

appium可以借助pc端selenium的物理按键代码来操作。 
driver.press_keycode() 括号内填入pc端键盘的代号

示例
均基于邢帅教育 APP

示例1:
#encoding=utf-8
from appium import webdriver
import time
caps = {}
#app的包名
caps["appPackage"] = "com.xsteach.appedu"

#需要启动的Activity名称
caps["appActivity"] = "com.xsteach.appedu.StartActivity"

#系统类
caps["platformName"] = "Android"

#系统版本
caps["platformVersion"] = "6"
#设置id
caps["deviceName"] = "G2W0214B11002712"
#使用使用 Unicode 输入法,支持中文
caps["unicodeKeyboard"] =  True
#在设定了 unicodeKeyboard 关键字的 Unicode 测试结束后,重置输入法到原有状态。
#如果单独使用,将会被忽略。默认值 false
caps["resetKeyboard"] = True

#自动确认警告
caps["autoAcceptAlerts"] = True
#会话前重置应用状态
caps["noReset"] = True
#设置命令超时时间
caps["newCommandTimeout"] = 6000

#创建driver对象
driver = webdriver.Remote("http://localhost:4723/wd/hub",caps)

#获取屏幕的宽度、高度,返回字典
size = driver.get_window_size()
print(size)

#判断对应的app是否安装
print(driver.is_app_installed("com.xsteach.appedu"))

#退出app
driver.close_app()

注意:通过adb shell dumpsys package com.xsteach.appedu获取的包名
不能带/

示例2:搜索
#encoding=utf-8
from appium import webdriver
import time
caps = {}
#app的包名
caps["appPackage"] = "com.xsteach.appedu"
#需要启动的Activity名称
caps["appActivity"] = "com.xsteach.appedu.StartActivity"
#系统类
caps["platformName"] = "Android"
#系统版本
caps["platformVersion"] = "6"
#设置id
caps["deviceName"] = "G2W0214B11002712"
#使用使用 Unicode 输入法,支持中文
caps["unicodeKeyboard"] =  True
#隐藏键盘,在设定了 unicodeKeyboard 关键字的 Unicode 测试结束后,重置输入法到原有状态。
#如果单独使用,将会被忽略。默认值 false
caps["resetKeyboard"] = True
#自动确认警告
caps["autoAcceptAlerts"] = True
#会话前重置应用状态
caps["noReset"] = True
#设置命令超时时间
caps["newCommandTimeout"] = 6000

#创建driver对象
driver = webdriver.Remote("http://localhost:4723/wd/hub",caps)

#打印当前页面的Activity
print(driver.current_activity)

time.sleep(5)

#获取个人中心元素对象,返回的是一个list
uList = driver.find_elements_by_android_uiautomator("new UiSelector().text(\"个人中心\")")

print(uList)
print(uList[0].text)

#获取顶部搜索框对象
searchBox = driver.find_element_by_id("com.xsteach.appedu:id/rl_home_top_search")
searchBox.click()
time.sleep(3)

#获取二级页面的搜索框对象
searchBox2 = driver.find_element_by_id("com.xsteach.appedu:id/editText")
time.sleep(3)

#输入搜索关键字
searchBox2.send_keys("PS")
time.sleep(4)

#获取搜索出的第一个内容并点击
driver.find_element_by_id("com.xsteach.appedu:id/item_tv_dynamic_search_result").click()
time.sleep(3)

#关闭app
driver.close_app()

示例3:登录
#encoding=utf-8
from appium import webdriver
import time
caps = {}
#app的包名
caps["appPackage"] = "com.xsteach.appedu"
#需要启动的Activity名称
caps["appActivity"] = "com.xsteach.appedu.StartActivity"
#系统类
caps["platformName"] = "Android"
#系统版本
caps["platformVersion"] = "6"
#设置id
caps["deviceName"] = "G2W0214B11002712"
#使用使用 Unicode 输入法,支持中文
caps["unicodeKeyboard"] =  True
#隐藏键盘,在设定了 unicodeKeyboard 关键字的 Unicode 测试结束后,重置输入法到原有状态。
#如果单独使用,将会被忽略。默认值 false
caps["resetKeyboard"] = True
#自动确认警告
caps["autoAcceptAlerts"] = True
#会话前重置应用状态
caps["noReset"] = True
#设置命令超时时间
caps["newCommandTimeout"] = 6000

#创建driver对象
driver = webdriver.Remote("http://localhost:4723/wd/hub",caps)

#获取个人中心页面元素
personInfo = driver.find_element_by_id("content_rb_mine")
personInfo.click()
time.sleep(3)

#获取"点击登录"按钮元素
click_login = driver.find_element_by_id("tvLogin")
click_login.click()
time.sleep(3)

#获取用户名输入框,并输入用户名
userName = driver.find_element_by_id("etUser")
userName.send_keys("fosterwu")
time.sleep(2)
#获取密码输入框并输入名
passWord = driver.find_element_by_id("etPwd")
passWord.send_keys("gloryroad123")

time.sleep(2)
#获取登录按钮,并点击登录按钮
loginButton = driver.find_element_by_id("btnLogin")
loginButton.click()

time.sleep(3)
#退出app
driver.close_app()

示例4:
进入平面设计模块,然后选择第一个课程,然后一直返回到首页
#encoding=utf-8
from appium import webdriver
import time
caps = {}
#app的包名
caps["appPackage"] = "com.xsteach.appedu"
#需要启动的Activity名称
caps["appActivity"] = "com.xsteach.appedu.StartActivity"
#系统类
caps["platformName"] = "Android"
#系统版本
caps["platformVersion"] = "6"
#设置id
caps["deviceName"] = "G2W0214B11002712"
#使用使用 Unicode 输入法,支持中文
caps["unicodeKeyboard"] =  True
#隐藏键盘,在设定了 unicodeKeyboard 关键字的 Unicode 测试结束后,重置输入法到原有状态。
#如果单独使用,将会被忽略。默认值 false
caps["resetKeyboard"] = True
#自动确认警告
caps["autoAcceptAlerts"] = True
#会话前重置应用状态
caps["noReset"] = True
#设置命令超时时间
caps["newCommandTimeout"] = 6000

#创建driver对象
driver = webdriver.Remote("http://localhost:4723/wd/hub",caps)

#获取平面设计元素对象
pm = driver.find_elements_by_id("com.xsteach.appedu:id/rlItemView")[1]
pm.click()

time.sleep(3)

#获取平面设计下的第一个课程
course = driver.find_elements_by_xpath("//*[@class='android.widget.ImageView']")[1]
course .click()
time.sleep(3)

#也可以直接用图标下的文本定位
#course = driver.find_element_by_android_uiautomator('new UiSelector().text("Illustrator普通班课程(录播)")')

#获取当前课程页面的返回按钮
course_back = driver.find_element_by_id("com.xsteach.appedu:id/iv_back")
course_back.click()
time.sleep(3)

#获取平面设计页面的返回按钮
pm_back =  driver.find_elements_by_xpath("//*[@class='android.widget.ImageView']")[0]
pm_back.click()

由于以上两个元素的id和class都不唯一,需要先获取到所有的元素,然后再取某一个,
并且第一个课程的index都是0,此时只好先获取到所有的元素;

感谢你能够认真阅读完这篇文章,希望小编分享的“python中Appium怎么用”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!


当前文章:python中Appium怎么用
当前链接:http://cdxtjz.cn/article/jdshco.html

其他资讯