python中Appium怎么用

這篇文章主要介紹了python中Appium怎么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)建站不只是一家網站建設的網絡公司;我們對營銷、技術、服務都有自己獨特見解,公司采取“創(chuàng)意+綜合+營銷”一體化的方式為您提供更專業(yè)的服務!我們經歷的每一步也許不一定是最完美的,但每一步都有值得深思的意義。我們珍視每一份信任,關注我們的成都網站設計、成都做網站、外貿網站建設質量和服務品質,在得到用戶滿意的同時,也能得到同行業(yè)的專業(yè)認可,能夠為行業(yè)創(chuàng)新發(fā)展助力。未來將繼續(xù)專注于技術創(chuàng)新,服務升級,滿足企業(yè)一站式營銷型網站建設需求,讓再小的品牌網站設計也能產生價值!

Appium
Appium 服務關鍵字
關鍵字 描述  實例  
automationName  你想使用的自動化測試引擎    Appium (默認) 或 Selendroid    
platformName    你要測試的手機操作系統(tǒng) iOS, Android, 或 FirefoxOS   
platformVersion 手機操作系統(tǒng)版本    例如: 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系統(tǒng),如果你指定app-package和app-activity(具體見下面)的話,那么就可以不指定app。 會與 browserName 沖突   比如/abs/path/to/my.apk或http://myapp.com/app.ipa  
browserName 需要進行自動化測試的手機 web 瀏覽器名稱。如果是對應用進行自動化測試,這個關鍵字的值應為空。    iOS 系統(tǒng)上可以用 'Safari' ,Android 系統(tǒng)上可以用 'Chrome', 'Chromium', 或 'Browser'。  
newCommandTimeout   設置命令超時時間,單位:秒。達到超時時間仍未接收到新的命令時 Appium 會假設客戶端退出然后自動結束會話。 比如 60   
autoLaunch  Appium是否需要自動安裝和啟動應用。默認值true true, false 
language    (Sim/Emu-only) 設定模擬器 ( simulator / emulator ) 的語言。  如: fr   
locale  (Sim/Emu-only) 設定模擬器 ( simulator / emulator ) 的區(qū)域設置。    如: fr_CA    
udid    連接的物理設備的唯一設備標識  如: 1ae203187fc012g  
orientation (Sim/Emu-only) 在一個設定的方向模式中開始測試  LANDSCAPE (橫向) 或 PORTRAIT (縱向)  
autoWebview 直接轉換到 WebView 上下文。 默認值 false、   true, false 
noReset 不要在會話前重置應用狀態(tài)。默認值false。  true, false 
fullReset   (iOS) 刪除整個模擬器目錄。(Android) 通過卸載——而不是清空數據——來重置應用狀態(tài)。在 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 用于執(zhí)行測試的 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 開發(fā)工具的 socket 名稱。只有在被測應用是一個使用 Chromium 內核的瀏覽器時需要。 socket 會被瀏覽器打開,然后 Chromedriver 把它作為開發(fā)者工具來進行連接。 如 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 可執(zhí)行文件的絕對路徑 (如果 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 ) 。如果被測應用是被另一個應用創(chuàng)建的,當這個參數被設定為 false 時,允許另一個應用的進程在使用 adb 啟動被測應用時繼續(xù)存活。默認值 true   true 或 false
unicodeKeyboard 使用 Unicode 輸入法。默認值false true 或 false
resetKeyboard   在設定了 unicodeKeyboard 關鍵字的 Unicode 測試結束后,重置輸入法到原有狀態(tài)。如果單獨使用,將會被忽略。默認值 false   true 或 false
noSign  跳過檢查和對應用進行 debug 簽名的步驟。只能在使用 UiAutomator 時使用,使用 selendroid 是不行。默認值 false    true 或 false
ignoreUnimportantViews  調用 uiautomator 的函數setCompressedLayoutHierarchy()。由于 Accessibility 命令在忽略部分元素的情況下執(zhí)行速度會加快,這個關鍵字能加快測試執(zhí)行的速度。被忽略的元素將不能夠被找到,因此這個關鍵字同時也被實現成可以隨時改變的 *設置 ( settings ) * 。默認值 false    true 或 false

 
iOS特有
關鍵字 描述  實例
calendarFormat  (Sim-only) 為iOS的模擬器設置日歷格式   如 gregorian (公歷)
bundleId    被測應用的 bundle ID 。用于在真實設備中啟動測試,也用于使用其他需要 bundle ID 的關鍵字啟動測試。在使用 bundle ID 在真實設備上執(zhí)行測試時,你可以不提供 app 關鍵字,但你必須提供 udid 。   如 io.appium.TestApp
udid    連接的真實設備的唯一設備編號 ( Unique device identifier ) 如 1ae203187fc012g
launchTimeout   以毫秒為單位,在 Appium 運行失敗之前設置一個等待 instruments 的時間    比如: 20000
locationServicesEnabled (Sim-only) 強制打開或關閉定位服務。默認值是保持當前模擬器的設定   true 或 false
locationServicesAuthorized  (Sim-only) 通過修改 plist 文件設定是否允許應用使用定位服務,從而避免定位服務的警告出現。默認值是保持當前模擬器的設定。請注意在使用這個關鍵字時,你同時需要使用 bundleId 關鍵字來發(fā)送你的應用的 bundle ID。    true 或者 false
autoAcceptAlerts    當 iOS 的個人信息訪問警告 (如 位置、聯(lián)系人、圖片) 出現時,自動選擇接受( Accept )。默認值 false。   true 或者 false
autoDismissAlerts   當 iOS 的個人信息訪問警告 (如 位置、聯(lián)系人、圖片) 出現時,自動選擇不接受( 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 中創(chuàng)建新窗口。默認保持模擬器當前設置。   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 自動化腳本代碼。默認情況下系統(tǒng)等待直到頁面內容非空。結果必須是布爾類型。   例如 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、匹配部分文本
#社區(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)實際調用的都是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)查找控件子結點

   需要先獲取節(jié)點元素parent,然后獲取對應的子節(jié)點

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以為你上次未關閉,會創(chuàng)建Session失敗。
關閉app
driver.close_app()

模擬點擊返回鍵
模擬操作系統(tǒng)的返回鍵

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"

#系統(tǒng)類
caps["platformName"] = "Android"

#系統(tǒng)版本
caps["platformVersion"] = "6"
#設置id
caps["deviceName"] = "G2W0214B11002712"
#使用使用 Unicode 輸入法,支持中文
caps["unicodeKeyboard"] =  True
#在設定了 unicodeKeyboard 關鍵字的 Unicode 測試結束后,重置輸入法到原有狀態(tài)。
#如果單獨使用,將會被忽略。默認值 false
caps["resetKeyboard"] = True

#自動確認警告
caps["autoAcceptAlerts"] = True
#會話前重置應用狀態(tài)
caps["noReset"] = True
#設置命令超時時間
caps["newCommandTimeout"] = 6000

#創(chuàng)建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"
#系統(tǒng)類
caps["platformName"] = "Android"
#系統(tǒng)版本
caps["platformVersion"] = "6"
#設置id
caps["deviceName"] = "G2W0214B11002712"
#使用使用 Unicode 輸入法,支持中文
caps["unicodeKeyboard"] =  True
#隱藏鍵盤,在設定了 unicodeKeyboard 關鍵字的 Unicode 測試結束后,重置輸入法到原有狀態(tài)。
#如果單獨使用,將會被忽略。默認值 false
caps["resetKeyboard"] = True
#自動確認警告
caps["autoAcceptAlerts"] = True
#會話前重置應用狀態(tài)
caps["noReset"] = True
#設置命令超時時間
caps["newCommandTimeout"] = 6000

#創(chuàng)建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"
#系統(tǒng)類
caps["platformName"] = "Android"
#系統(tǒng)版本
caps["platformVersion"] = "6"
#設置id
caps["deviceName"] = "G2W0214B11002712"
#使用使用 Unicode 輸入法,支持中文
caps["unicodeKeyboard"] =  True
#隱藏鍵盤,在設定了 unicodeKeyboard 關鍵字的 Unicode 測試結束后,重置輸入法到原有狀態(tài)。
#如果單獨使用,將會被忽略。默認值 false
caps["resetKeyboard"] = True
#自動確認警告
caps["autoAcceptAlerts"] = True
#會話前重置應用狀態(tài)
caps["noReset"] = True
#設置命令超時時間
caps["newCommandTimeout"] = 6000

#創(chuàng)建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"
#系統(tǒng)類
caps["platformName"] = "Android"
#系統(tǒng)版本
caps["platformVersion"] = "6"
#設置id
caps["deviceName"] = "G2W0214B11002712"
#使用使用 Unicode 輸入法,支持中文
caps["unicodeKeyboard"] =  True
#隱藏鍵盤,在設定了 unicodeKeyboard 關鍵字的 Unicode 測試結束后,重置輸入法到原有狀態(tài)。
#如果單獨使用,將會被忽略。默認值 false
caps["resetKeyboard"] = True
#自動確認警告
caps["autoAcceptAlerts"] = True
#會話前重置應用狀態(tài)
caps["noReset"] = True
#設置命令超時時間
caps["newCommandTimeout"] = 6000

#創(chuàng)建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怎么用”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關知識等著你來學習!

分享題目:python中Appium怎么用
標題鏈接:http://bm7419.com/article20/jdshco.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供營銷型網站建設、動態(tài)網站面包屑導航、標簽優(yōu)化、建站公司、網站排名

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網站建設