前言
混合應(yīng)用是一種常見的app類型,主要是將web頁面嵌套到app中
測試準(zhǔn)備
操作步驟
- 手機(jī)(模擬器)與電腦連接,開啟USB調(diào)試模式炭分,通過adb devices可查看到此設(shè)備横浑。
adb connect 127.0.0.1:7555
電腦端园担、移動端安裝chrome瀏覽器奏纪。(盡量保證移動端chrome版本與PC端一致)根據(jù)對應(yīng)的Chrome瀏覽器版本安裝對應(yīng)的Chrome driver腌乡。
將下載的chromediver放到appium路徑中
- 如果是用appium server啟動的服務(wù)放到如下路徑
C:\Users\xxx\AppData\Roaming\npm\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win
- 如果是用appium-desktop啟動的服務(wù)放到如下路徑
C:\Users\xxx\AppData\Local\Programs\Appium\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win
-
打開dr.fone app 進(jìn)入web頁面京髓。(如圖所示)
-
pc端打開Chrome瀏覽器輸入:chrome://inspect/#devices 如圖所示
如果在 chrome://inspect/#devices 地址中航缀,沒有顯示對應(yīng)的webview,有可能未開啟調(diào)試模式堰怨。
開啟方式
- 在app中配置如下代碼(在WebView類中調(diào)用靜態(tài)方法setWebContentsDebuggingEnabled):
if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
注:此步驟芥玉,一般需要App開發(fā)人員開啟。
- 有些手機(jī)需要root權(quán)限
- android 4.4+
- 執(zhí)行腳本
from time import sleep
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
caps = {}
caps["platformName"] = "android"
caps["deviceName"] = "mumu"
caps["appPackage"] = "com.wondershare.drfone"
caps["appActivity"] = "com.wondershare.drfone.ui.activity.WelcomeActivity"
caps["autoGrantPermissions"] = True
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
driver.implicitly_wait(15)
# 點擊BackupBtn
driver.find_element_by_id('com.wondershare.drfone:id/btnBackup').click()
WebDriverWait(driver,8).until(lambda x:x.find_element_by_id('com.wondershare.drfone:id/btnRecoverData'))
# 點擊NextBtn
driver.find_element_by_id('com.wondershare.drfone:id/btnRecoverData').click()
#等待webview頁面顯示
WebDriverWait(driver,20).until(lambda x:x.find_element_by_class_name('android.webkit.WebView'))
# 獲取所有上下文
contexts=driver.contexts
print(contexts)
sleep(10)
# 切換上下文备图,進(jìn)入webview頁面
driver.switch_to.context('WEBVIEW_com.wondershare.drfone')
# 輸入郵箱地址
driver.find_element_by_id('email').send_keys('shuqing@wondershare.cn')
# 點擊sendBtn
driver.find_element_by_class_name('btn_send').click()
#切換上下文 (回到app原生頁面)
driver.switch_to.context('NATIVE_APP')
# 點擊返回
driver.find_element_by_class_name('android.widget.ImageButton').click()
補(bǔ)充 WebView 如何查找元素
- 使用原來(uiautomator)查找原生app的方式來查找元素
- 把webview的鏈接提取出來灿巧,通過pc的chrome打開鏈接,然后打開開發(fā)者工具找到元素使用selenium的方式定位
- 通過chrome://inspect/#devices方式查找元素(注意此方法需要梯子揽涮,否則無法打開)