14.0 native webview H5切換
2020-04-11

在講這章之前先說明一個問題,那就是 native webview 都是屬于原生的...webview目前用的比較多的是谷歌內核和騰訊X5內核? H5是網頁!

?

?

還是安卓市場---直接寫好腳本進入個人中心/點擊熱門活動下的一張圖片即可進入webview頁面!如圖所示

?

?

用模擬器進入頁面之后-我們利用uiautomator看下!很明顯這是一個webview頁面,在這個頁面上評論和分享都是定位不鳥的,您可以試一下!(安卓6.0+除外....這里就不管能不能定位,都先假裝定位不鳥)

這個時候直接打開電腦谷歌輸入?chrome://inspect/#devices:會發現如下類容

?

這里注意了:如果你是真機操作安卓市場,進入這個webview頁面,你會發現,谷歌發打開之后,沒有獲取到內容!這是因為 安卓市場 它本身的webview的調試模式沒有打開所以獲取不到手機上的webview頁面....Genymotion模擬器是經過大神處理了,才可以獲取...這個記住就好。原理就沒得講了--境界還不夠

?

當然如果是自己公司的app。直接讓開發把webview的調試模式打開就好了

那現在就先講模擬器:

?谷歌瀏覽器進入這個頁面之后-點擊inspect,正確效果如下圖所示:

?

?

但是你的肯定是一片空白,這個是因為第一次需要翻一下墻,才可以打開....

現在我們就可以定位了,那我們就從native切換到webview或者H5頁面,然后點擊評論進入登錄頁面

首先不做切換直接點擊:提示找不到元素

切換之后:

先print(list_page)--執行腳本,復制我需要切換的頁面 -----然后才

寫下一句腳本driver.switch_to.context("頁面")

?

from appium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom appium.webdriver.common.touch_action import TouchAction #導入Touch Action類import time,re,osStart={}Start["platformName"]="android" #設備型號 android或者iosStart["platformVersion"]="5.1" #安卓設備版本號Start["deviceName"]="192.168.176.101:5555" #安卓設備名稱Start["app"]=r"C:UsersAdministratorDesktopxuexiapkanzhuoshichang_16793302.apk" #設備路徑 pc電腦存放apk包的路徑#上面的路徑不推薦這種寫法,但是目前先這么寫!后續告訴大家正確的寫法Start["appPackage"]="com.hiapk.marketpho" #包名Start["appActivity"]="com.baidu.appsearch.LauncherActivity" #容器Start["noReset"]="True" #是否重新安裝app True不重新安裝Start["unicodeKeyboard"]="True" #是否禁用手機鍵盤 True禁用手機輸入法Start["resetKeyboard"]="True" #是否啟動appium自帶鍵盤 True開始手機輸入法Start["automationName"]="uiautomator2" #可選模式 本教程默認 Uiautomator2Start["newCommandTimeout"]="400" #超時時間(s)driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",Start)driver.implicitly_wait(10) #隱式等待十秒time.sleep(3)"""上面還是原來的味道"""#先找到安卓市場上的webview頁面---在個人中心里面有一個head="com.hiapk.marketpho:id/person_center_btn"driver.find_element_by_id(head).click() #點擊頭像圖標進入個人中心#點擊個人中心/熱門活動下的第一張圖片driver.find_element_by_id("com.hiapk.marketpho:id/entry_left").click()time.sleep(3)#切換webviewlist_page=driver.contexts #獲取所有頁面返回一個listprint(list_page) #打印listdriver.switch_to.context(list_page[1]) #切換到webview頁面print(driver.current_context) #獲取當前的環境driver.find_element_by_xpath("/html/body/div[5]/div/div/div/div[1]/span[2]").click()#點擊評論

?

如果是真機呢:大家會發現我這款模擬器既沒有下載谷歌,安卓市場的webview調試模式也沒有打開,但是就是可以操作!..

使用真機操作webview頁面:

1.手機打開調試模式

2.手機上下載谷歌瀏覽器,版本建議大于38

3.軟件webvewi調試模式打開

4.pc上的chromedriverwebview使用的谷歌版本一致

5.如果軟件使用的是騰訊X5內核,那么需要進入微信任意輸入框輸入http://debugx5.qq.com打開TBS調試模式

?

第一個點,如果手機調試模式不打開----手機都獲取不到-不存在自動化了

第二個點,手機上如果沒有寫下載谷歌瀏覽器--webview頁面是無法在谷歌上展示的

第三個點,軟件webview調試模式未打開,pc端谷歌上不會展示軟件里面的webview頁面,如圖所示:

Custom Phone是模擬器???? Redmi Note 5A是我的紅米5A安卓測試機

第四個點,pc上的chromedriver與webview版本不一致,會導致切換webview的時候切換不過去,長時間后報錯,提示版本問題,如圖所示:

那么chromedriver這個用什么版本呢--第三點中的圖片可以看到模擬器的是谷歌39版本的,把chromedriver(chromedriver對應版本及下載地址:https://blog.csdn.net/cz9025/article/details/70160273/)換成對應39版本的就可以切換成功了

?

如果是npm安裝的默認地址應該是在:

C:UsersAdministratorAppDataRoamingpmode_modulesappiumode_modulesappium-chromedriverchromedriverwin

?

其他方式安裝的或者更改路徑了的,自行尋找即可----然后下載對應軟件內核版本的驅動替換即可,因為安卓市場的webview調試模式沒打開這里就不做演示了,和模擬器切換的方式一樣,您可以用自家公司的app感受一下!

?

?

另外WEBIVEW 安卓6.0以上,是可以直接使用uiautomator定位元素的,webview是原生頁面,安卓6.0+之后是支持把webview頁面解析成若干個view,當然如果是H5的網頁,這里就必須用谷歌去定位元素了 ?如圖所示:

?

這種直接根據driver.find_element_by_xpath("http://*[@text="評論"]").click()定位就可以了

体彩云南十一选五下载 内蒙古十一选五前三直遗漏 广东十一选五专家推荐 中国福利彩票河北快3 幸运农场破解版 3d试机号关注号金码 国金宝理财平台 河北省十一选五走势图 广东快乐10分研究 七星彩历史开奖全查询 098期排列3 正规股票配资平台 宁夏今天十一选五开奖 四川快乐12分布走势图 可以画规律的排列五软件 11选5云南开奖结果走势图 基金配资合法性