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怎么用"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
按键
定位
应用
元素
关键
关键字
输入
测试
系统
时间
名称
控件
模拟器
状态
设备
参数
输入法
页面
对象
平面
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库插入二维数组
软件开发期末论文
玲珑密保锁数据库访问异常
服务器3000g流量
教师网络安全培训知识
吉林省爱配互联网科技有限公司
qq ip数据库
磐安软件开发商
软件开发后客户不给钱怎么办
手机网络安全威胁
音乐站服务器
网络安全也是我们公司
行政服务中心监控网络安全
安全删除数据库
数据库检测点
宾馆网络安全
嵌入式大数据软件开发心得体会
南通网络安全与执法
北京飞点网络技术有限公司
数据库建表设置主键的要求
油库网络安全和信息化工作总结
公司被公安控制服务器
360网络安全副总裁王伟
软件连不上数据库
华为认证网络安全教材
数据库具有可恢复性
go动态加载数据库
数据库映射有用吗
数据库监听未能启动
杭州沃坦网络技术有限公司