温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python中Appium怎么用

发布时间:2021-10-18 11:55:29 阅读:157 作者:小新 栏目:编程语言
Python开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这篇文章主要介绍了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 truefalse 
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、   truefalse 
noReset 不要在会话前重置应用状态。默认值false。  truefalse 
fullReset   (iOS) 删除整个模拟器目录。(Android) 通过卸载——而不是清空数据——来重置应用状态。在 Android 上,这也会在会话结束后自动清除被测应用。默认值 false    truefalse 
 
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)   truefalse
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 <EXTRA_KEY>, --ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE>
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()

<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

用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()

<a href="https://www.hao123.com" name="tj_trhao123" class="mnav">hao123</a>

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怎么用”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×