測試場景
啟動釘釘app進入工作H5頁面,點擊考勤簽到
查看webview上元素
1.電腦上打開chrome瀏覽器輸入:chrome://inspect/#devices
2.Discover USB devices這個要勾選的,可以檢查到手機設備
3.Discover network targets 這個勾選,檢查到網絡
4.下圖箭頭指向的,是手機的設備名稱
5.Webview in com.alibaba.android.rimet(39.0.00)這個是手機上瀏覽器的內核版本號39
(一般電腦上的chrome版本號最好要大於等於這個版本號)
1.上圖紅色框框的兩個地址就是加載到的webview的網頁地址了,點地址下的inspect按鈕,進入調試界面
(當然沒有梯子爬的同學,打開是一片空白的,你懂得)
2.不會爬梯子的也沒關系,把對應的url地址復制出來,重新打開一個瀏覽器標簽,輸入地址后,按F12也可以進調試界面。
3.接下來的元素定位就跟selenium的定位是一回事了。
代碼實踐:
1 from appium import webdriver 2 from selenium.webdriver.support.ui import WebDriverWait 3 from selenium.common.exceptions import NoSuchElementException 4 import time 5 desired_caps = { 6 #android的apk
7 'platformName': 'Android', 8 #手機設備名稱
9 'deviceName': '127.0.0.1:21503', 10 #android系統的版本號
11 'platformVersion': '5.1.1', 12 # 'deviceName': 'ceshi',
13 # 'platformVersion': '7.0',
14 # 'udid':'83f04b4b5338424e',
15
16
17 # 'app':r'C:\Users\bzART\Desktop\app-artmall-release.apk',
18 # apk包名
19 'appPackage': 'com.alibaba.android.rimet', 20 # apk的launcherActivity
21 'appActivity': 'biz.home.activity.HomeActivity', 22 #默認neReset為false,不要在會話前重置應用狀態,每次啟動都跟第一次啟動一樣,變為true則不一樣
23 'noReset':'True', 24 #下面兩行代碼是為了屏蔽軟件盤以至於可以輸入中文
25 'unicodeKeyboard':True,#使用unicode編碼方式發送字符串
26 'resetKeyboard':True#將鍵盤隱藏起來
27 } 28 driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) 29 WebDriverWait(driver,8).until(lambda x:x.find_element_by_id('com.alibaba.android.rimet:id/home_bottom_tab_button_work')) 30 driver.find_element_by_id('com.alibaba.android.rimet:id/home_bottom_tab_button_work').click() 31
32 WebDriverWait(driver,8).until(lambda x:x.find_element_by_class_name('android.webkit.WebView')) 33 #獲取所有的環境
34 contexts=driver.contexts 35 print(contexts) 36 time.sleep(10) 37 #切換到webview
38 driver.switch_to.context('WEBVIEW_com.alibaba.android.rimet') 39 #獲取當前的環境,看是否切換成功
40 print(driver.current_context) 41
42 time.sleep(20) 43 #點擊考勤簽到
44 driver.find_element_by_xpath('//*[@id="dingapp"]/div/div[4]/div[1]/div[2]/div/div[3]/div/div[2]/p').click() 45
46 #切換回native
47 driver.switch_to.context("NATIVE_APP") 48 # driver.switch_to.context(contexts[0])