您好,登錄后才能下訂單哦!
這篇文章主要介紹了python中Appium怎么用,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
Appium Appium 服務(wù)關(guān)鍵字 關(guān)鍵字 描述 實(shí)例 automationName 你想使用的自動(dòng)化測試引擎 Appium (默認(rèn)) 或 Selendroid platformName 你要測試的手機(jī)操作系統(tǒng) iOS, Android, 或 FirefoxOS platformVersion 手機(jī)操作系統(tǒng)版本 例如: 7.1, 4.4 deviceName 使用的手機(jī)類型或模擬器類型 iPhone Simulator, iPad Simulator, iPhone Retina 4-inch, Android Emulator, Galaxy S4, 等。在 iOS 上,這個(gè)關(guān)鍵字的值必須是使用 instruments -s devices 得到的可使用的設(shè)備名稱之一。在 Android 上,這個(gè)關(guān)鍵字目前不起作用。 app .ipa or .apk文件所在的本地絕對(duì)路徑或者遠(yuǎn)程路徑,也可以是一個(gè)包括兩者之一的.zip。 Appium會(huì)先嘗試安裝路徑對(duì)應(yīng)的應(yīng)用在適當(dāng)?shù)恼鏅C(jī)或模擬器上。針對(duì)Android系統(tǒng),如果你指定app-package和app-activity(具體見下面)的話,那么就可以不指定app。 會(huì)與 browserName 沖突 比如/abs/path/to/my.apk或http://myapp.com/app.ipa browserName 需要進(jìn)行自動(dòng)化測試的手機(jī) web 瀏覽器名稱。如果是對(duì)應(yīng)用進(jìn)行自動(dòng)化測試,這個(gè)關(guān)鍵字的值應(yīng)為空。 iOS 系統(tǒng)上可以用 'Safari' ,Android 系統(tǒng)上可以用 'Chrome', 'Chromium', 或 'Browser'。 newCommandTimeout 設(shè)置命令超時(shí)時(shí)間,單位:秒。達(dá)到超時(shí)時(shí)間仍未接收到新的命令時(shí) Appium 會(huì)假設(shè)客戶端退出然后自動(dòng)結(jié)束會(huì)話。 比如 60 autoLaunch Appium是否需要自動(dòng)安裝和啟動(dòng)應(yīng)用。默認(rèn)值true true, false language (Sim/Emu-only) 設(shè)定模擬器 ( simulator / emulator ) 的語言。 如: fr locale (Sim/Emu-only) 設(shè)定模擬器 ( simulator / emulator ) 的區(qū)域設(shè)置。 如: fr_CA udid 連接的物理設(shè)備的唯一設(shè)備標(biāo)識(shí) 如: 1ae203187fc012g orientation (Sim/Emu-only) 在一個(gè)設(shè)定的方向模式中開始測試 LANDSCAPE (橫向) 或 PORTRAIT (縱向) autoWebview 直接轉(zhuǎn)換到 WebView 上下文。 默認(rèn)值 false、 true, false noReset 不要在會(huì)話前重置應(yīng)用狀態(tài)。默認(rèn)值false。 true, false fullReset (iOS) 刪除整個(gè)模擬器目錄。(Android) 通過卸載——而不是清空數(shù)據(jù)——來重置應(yīng)用狀態(tài)。在 Android 上,這也會(huì)在會(huì)話結(jié)束后自動(dòng)清除被測應(yīng)用。默認(rèn)值 false true, false Android特有 關(guān)鍵字 描述 實(shí)例 appActivity 你要從你的應(yīng)用包中啟動(dòng)的 Android Activity 名稱。它通常需要在前面添加 . (如:使用.MainActivity 而不是 MainActivity) MainActivity, .Settings appPackage 你想運(yùn)行的Android應(yīng)用的包名 比如com.example.android.myApp, com.android.settings appWaitActivity 你想要等待啟動(dòng)的 Android Activity 名稱 SplashActivity deviceReadyTimeout 設(shè)置等待一個(gè)模擬器或真機(jī)準(zhǔn)備就緒的超時(shí)時(shí)間 5 androidCoverage 用于執(zhí)行測試的 instrumentation 類。作為命令 adb shell am instrument -e coverage true -w 的-w 參數(shù)。 com.my.Pkg/com.my.Pkg.instrumentation.MyInstrumentation enablePerformanceLogging (僅適用于 Chrome 和 webview) 開啟 Chromedriver 的性能日志。 (默認(rèn) false) true, false androidDeviceReadyTimeout 等待設(shè)備在啟動(dòng)應(yīng)用后準(zhǔn)備就緒的超時(shí)時(shí)間。以秒為單位。 如 30 androidDeviceSocket 開發(fā)工具的 socket 名稱。只有在被測應(yīng)用是一個(gè)使用 Chromium 內(nèi)核的瀏覽器時(shí)需要。 socket 會(huì)被瀏覽器打開,然后 Chromedriver 把它作為開發(fā)者工具來進(jìn)行連接。 如 chrome_devtools_remote avd 需要啟動(dòng)的 AVD (安卓虛擬設(shè)備) 名稱。 如 api19 avdLaunchTimeout 以毫秒為單位,等待 AVD 啟動(dòng)并連接到 ADB 的超時(shí)時(shí)間。(默認(rèn)值120000) 300000 avdReadyTimeout 以毫秒為單位,等待 AVD 完成啟動(dòng)動(dòng)畫的超時(shí)時(shí)間。(默認(rèn)值 120000) 300000 avdArgs 啟動(dòng) AVD 時(shí)需要加入的額外的參數(shù)。 如 -netfast useKeystore 使用一個(gè)自定義的 keystore 來對(duì) apk 進(jìn)行重簽名。默認(rèn)值 false true or false keystorePath 自定義 keystore 的路徑。默認(rèn): ~/.android/debug.keystore 如 /path/to.keystore keystorePassword 自定義 keystore 的密碼。 如 foo keyAlias key 的別名 如 androiddebugkey keyPassword key 的密碼 如 foo chromedriverExecutable webdriver 可執(zhí)行文件的絕對(duì)路徑 (如果 Chromium 核心提供了對(duì)應(yīng)的 webdriver, 應(yīng)該用它代替 Appium 自帶的 webdriver) /abs/path/to/webdriver autoWebviewTimeout 以毫秒為單位,等待 Webview 上下文激活的時(shí)間。默認(rèn)值 2000 如 4 intentAction 用于啟動(dòng) activity 的 intent action。 (默認(rèn)值android.intent.action.MAIN) 如 android.intent.action.MAIN,android.intent.action.VIEW intentCategory 用于啟動(dòng) activity 的 intent category。 (默認(rèn)值android.intent.category.LAUNCHER) 如 android.intent.category.LAUNCHER,android.intent.category.APP_CONTACTS intentFlags 用于啟動(dòng) activity 的標(biāo)識(shí) ( flags ) (默認(rèn)值 0x10200000) 如 0x10200000 optionalIntentArguments 用于啟動(dòng) activity 的額外 intent 參數(shù)。請查看?Intent 參數(shù) 如 --esn <EXTRA_KEY>, --ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> stopAppOnReset 在使用 adb 啟動(dòng)應(yīng)用前停止被測應(yīng)用的進(jìn)程 ( process ) 。如果被測應(yīng)用是被另一個(gè)應(yīng)用創(chuàng)建的,當(dāng)這個(gè)參數(shù)被設(shè)定為 false 時(shí),允許另一個(gè)應(yīng)用的進(jìn)程在使用 adb 啟動(dòng)被測應(yīng)用時(shí)繼續(xù)存活。默認(rèn)值 true true 或 false unicodeKeyboard 使用 Unicode 輸入法。默認(rèn)值false true 或 false resetKeyboard 在設(shè)定了 unicodeKeyboard 關(guān)鍵字的 Unicode 測試結(jié)束后,重置輸入法到原有狀態(tài)。如果單獨(dú)使用,將會(huì)被忽略。默認(rèn)值 false true 或 false noSign 跳過檢查和對(duì)應(yīng)用進(jìn)行 debug 簽名的步驟。只能在使用 UiAutomator 時(shí)使用,使用 selendroid 是不行。默認(rèn)值 false true 或 false ignoreUnimportantViews 調(diào)用 uiautomator 的函數(shù)setCompressedLayoutHierarchy()。由于 Accessibility 命令在忽略部分元素的情況下執(zhí)行速度會(huì)加快,這個(gè)關(guān)鍵字能加快測試執(zhí)行的速度。被忽略的元素將不能夠被找到,因此這個(gè)關(guān)鍵字同時(shí)也被實(shí)現(xiàn)成可以隨時(shí)改變的 *設(shè)置 ( settings ) * 。默認(rèn)值 false true 或 false iOS特有 關(guān)鍵字 描述 實(shí)例 calendarFormat (Sim-only) 為iOS的模擬器設(shè)置日歷格式 如 gregorian (公歷) bundleId 被測應(yīng)用的 bundle ID 。用于在真實(shí)設(shè)備中啟動(dòng)測試,也用于使用其他需要 bundle ID 的關(guān)鍵字啟動(dòng)測試。在使用 bundle ID 在真實(shí)設(shè)備上執(zhí)行測試時(shí),你可以不提供 app 關(guān)鍵字,但你必須提供 udid 。 如 io.appium.TestApp udid 連接的真實(shí)設(shè)備的唯一設(shè)備編號(hào) ( Unique device identifier ) 如 1ae203187fc012g launchTimeout 以毫秒為單位,在 Appium 運(yùn)行失敗之前設(shè)置一個(gè)等待 instruments 的時(shí)間 比如: 20000 locationServicesEnabled (Sim-only) 強(qiáng)制打開或關(guān)閉定位服務(wù)。默認(rèn)值是保持當(dāng)前模擬器的設(shè)定 true 或 false locationServicesAuthorized (Sim-only) 通過修改 plist 文件設(shè)定是否允許應(yīng)用使用定位服務(wù),從而避免定位服務(wù)的警告出現(xiàn)。默認(rèn)值是保持當(dāng)前模擬器的設(shè)定。請注意在使用這個(gè)關(guān)鍵字時(shí),你同時(shí)需要使用 bundleId 關(guān)鍵字來發(fā)送你的應(yīng)用的 bundle ID。 true 或者 false autoAcceptAlerts 當(dāng) iOS 的個(gè)人信息訪問警告 (如 位置、聯(lián)系人、圖片) 出現(xiàn)時(shí),自動(dòng)選擇接受( Accept )。默認(rèn)值 false。 true 或者 false autoDismissAlerts 當(dāng) iOS 的個(gè)人信息訪問警告 (如 位置、聯(lián)系人、圖片) 出現(xiàn)時(shí),自動(dòng)選擇不接受( Dismiss )。默認(rèn)值false。 true 或者 false nativeInstrumentsLib 使用原生 intruments 庫 (即關(guān)閉 instruments-without-delay ) true 或者 false nativeWebTap (Sim-only) 在Safari中允許"真實(shí)的",非基于 javascript 的 web 點(diǎn)擊 (tap) 。 默認(rèn)值: false。注意:取決于 viewport 大小/比例, 點(diǎn)擊操作不一定能精確地點(diǎn)中對(duì)應(yīng)的元素。 true 或者 false safariInitialUrl (Sim-only) (>= 8.1) 初始化 safari 的時(shí)使用的地址。默認(rèn)是一個(gè)本地的歡迎頁面 如https://www.github.com safariAllowPopups (Sim-only) 允許 javascript 在 Safari 中創(chuàng)建新窗口。默認(rèn)保持模擬器當(dāng)前設(shè)置。 true 或者 false safariIgnoreFraudWarning (Sim-only) 阻止 Safari 顯示此網(wǎng)站可能存在風(fēng)險(xiǎn)的警告。默認(rèn)保持瀏覽器當(dāng)前設(shè)置。 true 或者 false safariOpenLinksInBackground (Sim-only) Safari 是否允許鏈接在新窗口打開。默認(rèn)保持瀏覽器當(dāng)前設(shè)置。 true 或者 false keepKeyChains (Sim-only) 當(dāng) Appium 會(huì)話開始/結(jié)束時(shí)是否保留存放密碼存放記錄 (keychains) (庫(Library)/鑰匙串(Keychains)) true 或者 false localizableStringsDir 從哪里查找本地化字符串。默認(rèn)值 en.lproj en.lproj processArguments 通過 instruments 傳遞到 AUT 的參數(shù) 如 -myflag interKeyDelay 以毫秒為單位,按下每一個(gè)按鍵之間的延遲時(shí)間。 如 100 showIOSLog 是否在 Appium 的日志中顯示設(shè)備的日志。默認(rèn)值false true 或者 false sendKeyStrategy 輸入文字到文字框的策略。模擬器默認(rèn)值:oneByOne(一個(gè)接著一個(gè)) 。真實(shí)設(shè)備默認(rèn)值:grouped (分組輸入) oneByOne, grouped 或setValue screenshotWaitTimeout 以秒為單位,生成屏幕截圖的最長等待時(shí)間。默認(rèn)值: 10。 如 5 waitForAppScript 用于判斷 "應(yīng)用是否被啟動(dòng)” 的 iOS 自動(dòng)化腳本代碼。默認(rèn)情況下系統(tǒng)等待直到頁面內(nèi)容非空。結(jié)果必須是布爾類型。 例如 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 和其他元素重復(fù) 比如底部的幾個(gè)元素都是同一個(gè)class_name,但是index索引不一樣,從0開始 定位方式1: 需要注意,此種寫法和ui automator viewer給的索引不一樣,是從1開始 home_page = driver.find_element_by_xpath("//*[@class='android.widget.RadioButton'][1]") 定位方式2: 此處定位表達(dá)式的index取自u(píng)i automator viewer category = driver.find_element_by_xpath("//*[@class='android.widget.RadioButton' and @index=1]") 定位方式3: Uiautomator通過uiautomator定位,返回的是一列表,下標(biāo)從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返回的是一個(gè)列表需要取第一元素 #個(gè)人中心 p_center = driver.find_elements_by_android_uiautomator('new UiSelector().text("個(gè)人中心")')[0] 也可以使用find_element_by_android_uiautomator返回的是單個(gè)元素 #分類 category = driver.find_element_by_android_uiautomator('new UiSelector().text("分類")') 2、匹配部分文本 #社區(qū) 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)實(shí)際調(diào)用的都是find_element(by,value) 需要導(dǎo)入這個(gè)包: 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") 這個(gè)操作的好處是可以直接把操作的by和value放到一個(gè)元組里,然后調(diào)用通用方法來傳參獲得元素結(jié)果 cateid=(By.ID,"ag2") driver.find_element(*cateid).click() 用find_element()方法定位,兩個(gè)參數(shù) 第一個(gè)參數(shù)是定位的類型由By指定,第二個(gè)參數(shù)是具體的定位值; 傳入兩個(gè)個(gè)參數(shù)不需要是元組 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) 返回的是一個(gè)列表,需要通過下標(biāo)獲取對(duì)應(yīng)元素對(duì)象 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,如重復(fù)結(jié)合index 3、Uiautomator,可定位text等 4、xpath 常用API 點(diǎn)擊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”) 左右上下滑動(dòng) '''左滑''' 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) 滑動(dòng)界面 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)獲取當(dāng)前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)查找控件子結(jié)點(diǎn) 需要先獲取節(jié)點(diǎn)元素parent,然后獲取對(duì)應(yīng)的子節(jié)點(diǎn) parent.find_elements_by_class_name('android.widget.TextView') 截屏 driver.get_screenshot_as_file(file_path) 斷言源碼內(nèi)容 assert "平面廣告設(shè)計(jì)付款專用鏈接1" in driver.page_source #獲取當(dāng)前Activity的名稱 activity = driver.current_activity print(activity) #獲取屏幕高度、寬度 size = driver.get_window_size() print(size) #獲取平面設(shè)計(jì)元素 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 "平面廣告設(shè)計(jì)付款專用鏈接1" in driver.page_source file_path = "e:\\" + time.strftime("%Y-%m-%d") + ".png" driver.get_screenshot_as_file(file_path) 關(guān)閉driver driver.quit() 注意:一定要記得關(guān)閉driver, 否則下次連接的時(shí)候可能會(huì)出異常,因?yàn)锳ppium以為你上次未關(guān)閉,會(huì)創(chuàng)建Session失敗。 關(guān)閉app driver.close_app() 模擬點(diǎn)擊返回鍵 模擬操作系統(tǒng)的返回鍵 driver.press_keycode(4) 其中按鈕的定義,由Android里的KeyEvent.java里定義的,所以其它的Android按鈕也是支持的。 #獲取平面設(shè)計(jì)元素 pm = driver.find_elements_by_id("com.xsteach.appedu:id/rlItemView")[1] pm.click() time.sleep(5) assert "平面廣告設(shè)計(jì)付款專用鏈接1" in driver.page_source driver.press_keycode(4) 手機(jī)鍵盤事件的操作 兩個(gè)函數(shù)可用 driver.keyevent() driver.press_keycode(4) KEYCODE_CALL 撥號(hào)鍵 5 KEYCODE_ENDCALL 掛機(jī)鍵 6 KEYCODE_HOME 按鍵Home 3 KEYCODE_MENU 菜單鍵 82 KEYCODE_BACK 返回鍵 4 KEYCODE_SEARCH 搜索鍵 84 KEYCODE_CAMERA 拍照鍵 27 KEYCODE_FOCUS 拍照對(duì)焦鍵 80 KEYCODE_POWER 電源鍵 26 KEYCODE_NOTIFICATION 通知鍵 83 KEYCODE_MUTE 話筒靜音鍵 91 KEYCODE_VOLUME_MUTE 揚(yáng)聲器靜音鍵 164 KEYCODE_VOLUME_UP 音量增加鍵 24 KEYCODE_VOLUME_DOWN 音量減小鍵 25 控制鍵 KEYCODE_ENTER 回車鍵 66 KEYCODE_ESCAPE ESC鍵 111 KEYCODE_DPAD_CENTER 導(dǎo)航鍵 確定鍵 23 KEYCODE_DPAD_UP 導(dǎo)航鍵 向上 19 KEYCODE_DPAD_DOWN 導(dǎo)航鍵 向下 20 KEYCODE_DPAD_LEFT 導(dǎo)航鍵 向左 21 KEYCODE_DPAD_RIGHT 導(dǎo)航鍵 向右 22 KEYCODE_MOVE_HOME 光標(biāo)移動(dòng)到開始鍵 122 KEYCODE_MOVE_END 光標(biāo)移動(dòng)到末尾鍵 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 滾動(dòng)鎖定鍵 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() 括號(hào)內(nèi)填入pc端鍵盤的代號(hào) 示例 均基于邢帥教育 APP 示例1: #encoding=utf-8 from appium import webdriver import time caps = {} #app的包名 caps["appPackage"] = "com.xsteach.appedu" #需要啟動(dòng)的Activity名稱 caps["appActivity"] = "com.xsteach.appedu.StartActivity" #系統(tǒng)類 caps["platformName"] = "Android" #系統(tǒng)版本 caps["platformVersion"] = "6" #設(shè)置id caps["deviceName"] = "G2W0214B11002712" #使用使用 Unicode 輸入法,支持中文 caps["unicodeKeyboard"] = True #在設(shè)定了 unicodeKeyboard 關(guān)鍵字的 Unicode 測試結(jié)束后,重置輸入法到原有狀態(tài)。 #如果單獨(dú)使用,將會(huì)被忽略。默認(rèn)值 false caps["resetKeyboard"] = True #自動(dòng)確認(rèn)警告 caps["autoAcceptAlerts"] = True #會(huì)話前重置應(yīng)用狀態(tài) caps["noReset"] = True #設(shè)置命令超時(shí)時(shí)間 caps["newCommandTimeout"] = 6000 #創(chuàng)建driver對(duì)象 driver = webdriver.Remote("http://localhost:4723/wd/hub",caps) #獲取屏幕的寬度、高度,返回字典 size = driver.get_window_size() print(size) #判斷對(duì)應(yīng)的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" #需要啟動(dòng)的Activity名稱 caps["appActivity"] = "com.xsteach.appedu.StartActivity" #系統(tǒng)類 caps["platformName"] = "Android" #系統(tǒng)版本 caps["platformVersion"] = "6" #設(shè)置id caps["deviceName"] = "G2W0214B11002712" #使用使用 Unicode 輸入法,支持中文 caps["unicodeKeyboard"] = True #隱藏鍵盤,在設(shè)定了 unicodeKeyboard 關(guān)鍵字的 Unicode 測試結(jié)束后,重置輸入法到原有狀態(tài)。 #如果單獨(dú)使用,將會(huì)被忽略。默認(rèn)值 false caps["resetKeyboard"] = True #自動(dòng)確認(rèn)警告 caps["autoAcceptAlerts"] = True #會(huì)話前重置應(yīng)用狀態(tài) caps["noReset"] = True #設(shè)置命令超時(shí)時(shí)間 caps["newCommandTimeout"] = 6000 #創(chuàng)建driver對(duì)象 driver = webdriver.Remote("http://localhost:4723/wd/hub",caps) #打印當(dāng)前頁面的Activity print(driver.current_activity) time.sleep(5) #獲取個(gè)人中心元素對(duì)象,返回的是一個(gè)list uList = driver.find_elements_by_android_uiautomator("new UiSelector().text(\"個(gè)人中心\")") print(uList) print(uList[0].text) #獲取頂部搜索框?qū)ο? searchBox = driver.find_element_by_id("com.xsteach.appedu:id/rl_home_top_search") searchBox.click() time.sleep(3) #獲取二級(jí)頁面的搜索框?qū)ο? searchBox2 = driver.find_element_by_id("com.xsteach.appedu:id/editText") time.sleep(3) #輸入搜索關(guān)鍵字 searchBox2.send_keys("PS") time.sleep(4) #獲取搜索出的第一個(gè)內(nèi)容并點(diǎn)擊 driver.find_element_by_id("com.xsteach.appedu:id/item_tv_dynamic_search_result").click() time.sleep(3) #關(guān)閉app driver.close_app() 示例3:登錄 #encoding=utf-8 from appium import webdriver import time caps = {} #app的包名 caps["appPackage"] = "com.xsteach.appedu" #需要啟動(dòng)的Activity名稱 caps["appActivity"] = "com.xsteach.appedu.StartActivity" #系統(tǒng)類 caps["platformName"] = "Android" #系統(tǒng)版本 caps["platformVersion"] = "6" #設(shè)置id caps["deviceName"] = "G2W0214B11002712" #使用使用 Unicode 輸入法,支持中文 caps["unicodeKeyboard"] = True #隱藏鍵盤,在設(shè)定了 unicodeKeyboard 關(guān)鍵字的 Unicode 測試結(jié)束后,重置輸入法到原有狀態(tài)。 #如果單獨(dú)使用,將會(huì)被忽略。默認(rèn)值 false caps["resetKeyboard"] = True #自動(dòng)確認(rèn)警告 caps["autoAcceptAlerts"] = True #會(huì)話前重置應(yīng)用狀態(tài) caps["noReset"] = True #設(shè)置命令超時(shí)時(shí)間 caps["newCommandTimeout"] = 6000 #創(chuàng)建driver對(duì)象 driver = webdriver.Remote("http://localhost:4723/wd/hub",caps) #獲取個(gè)人中心頁面元素 personInfo = driver.find_element_by_id("content_rb_mine") personInfo.click() time.sleep(3) #獲取"點(diǎn)擊登錄"按鈕元素 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) #獲取登錄按鈕,并點(diǎn)擊登錄按鈕 loginButton = driver.find_element_by_id("btnLogin") loginButton.click() time.sleep(3) #退出app driver.close_app() 示例4: 進(jìn)入平面設(shè)計(jì)模塊,然后選擇第一個(gè)課程,然后一直返回到首頁 #encoding=utf-8 from appium import webdriver import time caps = {} #app的包名 caps["appPackage"] = "com.xsteach.appedu" #需要啟動(dòng)的Activity名稱 caps["appActivity"] = "com.xsteach.appedu.StartActivity" #系統(tǒng)類 caps["platformName"] = "Android" #系統(tǒng)版本 caps["platformVersion"] = "6" #設(shè)置id caps["deviceName"] = "G2W0214B11002712" #使用使用 Unicode 輸入法,支持中文 caps["unicodeKeyboard"] = True #隱藏鍵盤,在設(shè)定了 unicodeKeyboard 關(guān)鍵字的 Unicode 測試結(jié)束后,重置輸入法到原有狀態(tài)。 #如果單獨(dú)使用,將會(huì)被忽略。默認(rèn)值 false caps["resetKeyboard"] = True #自動(dòng)確認(rèn)警告 caps["autoAcceptAlerts"] = True #會(huì)話前重置應(yīng)用狀態(tài) caps["noReset"] = True #設(shè)置命令超時(shí)時(shí)間 caps["newCommandTimeout"] = 6000 #創(chuàng)建driver對(duì)象 driver = webdriver.Remote("http://localhost:4723/wd/hub",caps) #獲取平面設(shè)計(jì)元素對(duì)象 pm = driver.find_elements_by_id("com.xsteach.appedu:id/rlItemView")[1] pm.click() time.sleep(3) #獲取平面設(shè)計(jì)下的第一個(gè)課程 course = driver.find_elements_by_xpath("//*[@class='android.widget.ImageView']")[1] course .click() time.sleep(3) #也可以直接用圖標(biāo)下的文本定位 #course = driver.find_element_by_android_uiautomator('new UiSelector().text("Illustrator普通班課程(錄播)")') #獲取當(dāng)前課程頁面的返回按鈕 course_back = driver.find_element_by_id("com.xsteach.appedu:id/iv_back") course_back.click() time.sleep(3) #獲取平面設(shè)計(jì)頁面的返回按鈕 pm_back = driver.find_elements_by_xpath("//*[@class='android.widget.ImageView']")[0] pm_back.click() 由于以上兩個(gè)元素的id和class都不唯一,需要先獲取到所有的元素,然后再取某一個(gè), 并且第一個(gè)課程的index都是0,此時(shí)只好先獲取到所有的元素;
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“python中Appium怎么用”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。