千家信息网

python中Appium怎么用

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要介绍了python中Appium怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。AppiumAppium 服务关键字关
千家信息网最后更新 2025年02月01日python中Appium怎么用

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

AppiumAppium 服务关键字关键字 描述  实例  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, .SettingsappPackage  你想运行的Android应用的包名   比如com.example.android.myApp, com.android.settingsappWaitActivity 你想要等待启动的 Android Activity 名称    SplashActivitydeviceReadyTimeout  设置等待一个模拟器或真机准备就绪的超时时间   5androidCoverage 用于执行测试的 instrumentation 类。作为命令 adb shell am instrument -e coverage true -w 的-w 参数。  com.my.Pkg/com.my.Pkg.instrumentation.MyInstrumentationenablePerformanceLogging    (仅适用于 Chrome 和 webview) 开启 Chromedriver 的性能日志。 (默认 false)   true, falseandroidDeviceReadyTimeout   等待设备在启动应用后准备就绪的超时时间。以秒为单位。  如 30androidDeviceSocket 开发工具的 socket 名称。只有在被测应用是一个使用 Chromium 内核的浏览器时需要。 socket 会被浏览器打开,然后 Chromedriver 把它作为开发者工具来进行连接。 如 chrome_devtools_remoteavd 需要启动的 AVD (安卓虚拟设备) 名称。  如 api19avdLaunchTimeout    以毫秒为单位,等待 AVD 启动并连接到 ADB 的超时时间。(默认值120000)  300000avdReadyTimeout 以毫秒为单位,等待 AVD 完成启动动画的超时时间。(默认值 120000)  300000avdArgs 启动 AVD 时需要加入的额外的参数。 如 -netfastuseKeystore 使用一个自定义的 keystore 来对 apk 进行重签名。默认值 false    true or falsekeystorePath    自定义 keystore 的路径。默认: ~/.android/debug.keystore  如 /path/to.keystorekeystorePassword    自定义 keystore 的密码。   如 fookeyAlias    key 的别名 如 androiddebugkeykeyPassword key 的密码 如 foochromedriverExecutable  webdriver 可执行文件的绝对路径 (如果 Chromium 核心提供了对应的 webdriver, 应该用它代替 Appium 自带的 webdriver)  /abs/path/to/webdriverautoWebviewTimeout  以毫秒为单位,等待 Webview 上下文激活的时间。默认值 2000 如 4intentAction    用于启动 activity 的 intent action。 (默认值android.intent.action.MAIN)  如 android.intent.action.MAIN,android.intent.action.VIEWintentCategory  用于启动 activity 的 intent category。 (默认值android.intent.category.LAUNCHER)  如 android.intent.category.LAUNCHER,android.intent.category.APP_CONTACTSintentFlags 用于启动 activity 的标识 ( flags ) (默认值 0x10200000)    如 0x10200000optionalIntentArguments 用于启动 activity 的额外 intent 参数。请查看 Intent 参数   如 --esn , --ez  stopAppOnReset  在使用 adb 启动应用前停止被测应用的进程 ( process ) 。如果被测应用是被另一个应用创建的,当这个参数被设定为 false 时,允许另一个应用的进程在使用 adb 启动被测应用时继续存活。默认值 true   true 或 falseunicodeKeyboard 使用 Unicode 输入法。默认值false true 或 falseresetKeyboard   在设定了 unicodeKeyboard 关键字的 Unicode 测试结束后,重置输入法到原有状态。如果单独使用,将会被忽略。默认值 false   true 或 falsenoSign  跳过检查和对应用进行 debug 签名的步骤。只能在使用 UiAutomator 时使用,使用 selendroid 是不行。默认值 false    true 或 falseignoreUnimportantViews  调用 uiautomator 的函数setCompressedLayoutHierarchy()。由于 Accessibility 命令在忽略部分元素的情况下执行速度会加快,这个关键字能加快测试执行的速度。被忽略的元素将不能够被找到,因此这个关键字同时也被实现成可以随时改变的 *设置 ( settings ) * 。默认值 false    true 或 false iOS特有关键字 描述  实例calendarFormat  (Sim-only) 为iOS的模拟器设置日历格式   如 gregorian (公历)bundleId    被测应用的 bundle ID 。用于在真实设备中启动测试,也用于使用其他需要 bundle ID 的关键字启动测试。在使用 bundle ID 在真实设备上执行测试时,你可以不提供 app 关键字,但你必须提供 udid 。   如 io.appium.TestAppudid    连接的真实设备的唯一设备编号 ( Unique device identifier ) 如 1ae203187fc012glaunchTimeout   以毫秒为单位,在 Appium 运行失败之前设置一个等待 instruments 的时间    比如: 20000locationServicesEnabled (Sim-only) 强制打开或关闭定位服务。默认值是保持当前模拟器的设定   true 或 falselocationServicesAuthorized  (Sim-only) 通过修改 plist 文件设定是否允许应用使用定位服务,从而避免定位服务的警告出现。默认值是保持当前模拟器的设定。请注意在使用这个关键字时,你同时需要使用 bundleId 关键字来发送你的应用的 bundle ID。    true 或者 falseautoAcceptAlerts    当 iOS 的个人信息访问警告 (如 位置、联系人、图片) 出现时,自动选择接受( Accept )。默认值 false。   true 或者 falseautoDismissAlerts   当 iOS 的个人信息访问警告 (如 位置、联系人、图片) 出现时,自动选择不接受( Dismiss )。默认值false。  true 或者 falsenativeInstrumentsLib    使用原生 intruments 库 (即关闭 instruments-without-delay )  true 或者 falsenativeWebTap    (Sim-only) 在Safari中允许"真实的",非基于 javascript 的 web 点击 (tap) 。 默认值: false。注意:取决于 viewport 大小/比例, 点击操作不一定能精确地点中对应的元素。    true 或者 falsesafariInitialUrl    (Sim-only) (>= 8.1) 初始化 safari 的时使用的地址。默认是一个本地的欢迎页面 如https://www.github.comsafariAllowPopups   (Sim-only) 允许 javascript 在 Safari 中创建新窗口。默认保持模拟器当前设置。   true 或者 falsesafariIgnoreFraudWarning    (Sim-only) 阻止 Safari 显示此网站可能存在风险的警告。默认保持浏览器当前设置。    true 或者 falsesafariOpenLinksInBackground (Sim-only) Safari 是否允许链接在新窗口打开。默认保持浏览器当前设置。 true 或者 falsekeepKeyChains   (Sim-only) 当 Appium 会话开始/结束时是否保留存放密码存放记录 (keychains) (库(Library)/钥匙串(Keychains))    true 或者 falselocalizableStringsDir   从哪里查找本地化字符串。默认值 en.lproj    en.lprojprocessArguments    通过 instruments 传递到 AUT 的参数  如 -myflaginterKeyDelay   以毫秒为单位,按下每一个按键之间的延迟时间。  如 100showIOSLog  是否在 Appium 的日志中显示设备的日志。默认值false true 或者 falsesendKeyStrategy 输入文字到文字框的策略。模拟器默认值:oneByOne(一个接着一个) 。真实设备默认值:grouped (分组输入) oneByOne, grouped 或setValuescreenshotWaitTimeout   以秒为单位,生成屏幕截图的最长等待时间。默认值: 10。    如 5waitForAppScript    用于判断 "应用是否被启动" 的 iOS 自动化脚本代码。默认情况下系统等待直到页面内容非空。结果必须是布尔类型。   例如 true;,target.elements().length > 0;, $.delay(5000); true;Webview1、通过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_namesearch_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 viewercategory =  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()用iddriver.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()hao123driver.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、Id2、class_name,如重复结合index3、Uiautomator,可定位text等4、xpath常用API点击clickpm = 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 TouchActiondef 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_activity2)获取屏幕宽高screen = driver.get_window_size()3)获取控件文本mobile_name.get_attribute('text') mobile_name.text4)获取控件类名mobile_name.get_attribute('className')5)判断控件是否显示mobile_name.is_displayed() mobile_name.get_attribute('displayed')6)获得控件位置mobile_name.location7)获得控件大小mobile_name.size8)查找控件子结点   需要先获取节点元素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_activityprint(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_sourcefile_path = "e:\\" + time.strftime("%Y-%m-%d") + ".png"driver.get_screenshot_as_file(file_path)关闭driver driver.quit()注意:一定要记得关闭driver, 否则下次连接的时候可能会出异常,因为Appium以为你上次未关闭,会创建Session失败。关闭appdriver.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_sourcedriver.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' 54appium可以借助pc端selenium的物理按键代码来操作。 driver.press_keycode() 括号内填入pc端键盘的代号示例均基于邢帅教育 APP示例1:#encoding=utf-8from appium import webdriverimport timecaps = {}#app的包名caps["appPackage"] = "com.xsteach.appedu"#需要启动的Activity名称caps["appActivity"] = "com.xsteach.appedu.StartActivity"#系统类caps["platformName"] = "Android"#系统版本caps["platformVersion"] = "6"#设置idcaps["deviceName"] = "G2W0214B11002712"#使用使用 Unicode 输入法,支持中文caps["unicodeKeyboard"] =  True#在设定了 unicodeKeyboard 关键字的 Unicode 测试结束后,重置输入法到原有状态。#如果单独使用,将会被忽略。默认值 falsecaps["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"))#退出appdriver.close_app()注意:通过adb shell dumpsys package com.xsteach.appedu获取的包名不能带/示例2:搜索#encoding=utf-8from appium import webdriverimport timecaps = {}#app的包名caps["appPackage"] = "com.xsteach.appedu"#需要启动的Activity名称caps["appActivity"] = "com.xsteach.appedu.StartActivity"#系统类caps["platformName"] = "Android"#系统版本caps["platformVersion"] = "6"#设置idcaps["deviceName"] = "G2W0214B11002712"#使用使用 Unicode 输入法,支持中文caps["unicodeKeyboard"] =  True#隐藏键盘,在设定了 unicodeKeyboard 关键字的 Unicode 测试结束后,重置输入法到原有状态。#如果单独使用,将会被忽略。默认值 falsecaps["resetKeyboard"] = True#自动确认警告caps["autoAcceptAlerts"] = True#会话前重置应用状态caps["noReset"] = True#设置命令超时时间caps["newCommandTimeout"] = 6000#创建driver对象driver = webdriver.Remote("http://localhost:4723/wd/hub",caps)#打印当前页面的Activityprint(driver.current_activity)time.sleep(5)#获取个人中心元素对象,返回的是一个listuList = 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)#关闭appdriver.close_app()示例3:登录#encoding=utf-8from appium import webdriverimport timecaps = {}#app的包名caps["appPackage"] = "com.xsteach.appedu"#需要启动的Activity名称caps["appActivity"] = "com.xsteach.appedu.StartActivity"#系统类caps["platformName"] = "Android"#系统版本caps["platformVersion"] = "6"#设置idcaps["deviceName"] = "G2W0214B11002712"#使用使用 Unicode 输入法,支持中文caps["unicodeKeyboard"] =  True#隐藏键盘,在设定了 unicodeKeyboard 关键字的 Unicode 测试结束后,重置输入法到原有状态。#如果单独使用,将会被忽略。默认值 falsecaps["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)#退出appdriver.close_app()示例4:进入平面设计模块,然后选择第一个课程,然后一直返回到首页#encoding=utf-8from appium import webdriverimport timecaps = {}#app的包名caps["appPackage"] = "com.xsteach.appedu"#需要启动的Activity名称caps["appActivity"] = "com.xsteach.appedu.StartActivity"#系统类caps["platformName"] = "Android"#系统版本caps["platformVersion"] = "6"#设置idcaps["deviceName"] = "G2W0214B11002712"#使用使用 Unicode 输入法,支持中文caps["unicodeKeyboard"] =  True#隐藏键盘,在设定了 unicodeKeyboard 关键字的 Unicode 测试结束后,重置输入法到原有状态。#如果单独使用,将会被忽略。默认值 falsecaps["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怎么用"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

0