webview簡介:
在Android手機中內置了一款高性能webkit內核瀏覽器,在SDK中封裝為一個叫做WebView組件。如果把一個瀏覽器比作一輛汽車,我們可以認為webkit內核是他們的發動機,WebView是這輛車的引擎加傳動裝置。安卓系統中默認自帶的webview包名為com.android.webview。
Webview是chrome瀏覽器的內核,所有安卓手機必須預裝,用於顯示網頁,手機的APP可以調用它顯示網頁而不需要瀏覽器,升級以提升系統整體集成應用的網頁性能。此應用缺失會導致手機功能故障。
所以當app處於h5或者小程序頁面時,普通的定位工具根本就無法定位的到,所以這個時候就需要用到一款工具來輔助定位
inspect:
在谷歌瀏覽器的地址中輸入chrome://inspect/#devices
可以查看的到已鏈接到的設備,如果查看不到,開啟手機調試模式,以及電腦要確保adb環境。
手機谷歌瀏覽器打開一個頁面后,inspect即可出現對應的鏈接,點擊inspect即可打開頁面定位工具。
但由於國內被牆等原因,導致打開空白或者顯示404,那么只能換另外一款工具了,這里推薦使用ucdevtools
下載鏈接點擊這里,下載安裝后即可使用,打開后界面如下
使用方法也是點擊inspect即可,如果打開空白,可以在設置里改成使用本地資源,小程序也是同理,下面就可以愉快的定位啦
編寫腳本:
因為是要用到Chromedriver,在上面的ucdevtools工具即可看到對應的版本,去點擊下載地址下載對應版本的即可
查看webview進程需要用到如下命令
adb shell dumpsys activity top | grep "ACTIVITY" ====mac
adb shell dumpsys activity top | find "ACTIVITY" =====win
查到對應的進程的pid后使用命令 adb shell ps xxx 即可查看當前webview進程,如下圖所示
瀏覽器操作的代碼如下:
#作者:windfall #配置我就不貼全了,這里主要是要添加對應的chromedriver地址以及當前webview的進程 desired_caps['chromedriverExecutable']='/Users/chenghaoai/Desktop/appium/chromedriver' desired_caps['noReset']=True desired_caps['chromeOptions']={'androidProcess':'com.android.chrome'} time.sleep(5) con1=driver.contexts #獲取當前的webview print('當前的context是:{}'.format(con1)) #打印出來 time.sleep(3) driver.switch_to.context('WEBVIEW_chrome') #選擇對應的webview hand=driver.window_handles #獲取窗口 print('當前hand是:{}'.format(hand)) driver.switch_to.window('CDwindow-0') #選擇對應的窗口 #這里開始就可以使用web定位方式了 driver.find_element_by_xpath('//input[@type="search"]').click() driver.find_element_by_xpath('//input[@type="search"]').send_keys("ceshi") time.sleep(1) driver.find_element_by_xpath('//button[text()="百度一下"]').click() time.sleep(1) driver.find_element_by_xpath('//span[text()="視頻"]').click()
小程序的操作代碼如下:
#作者:windfall #配置就不貼全了,還是貼重要的 #重點是選擇Chrome對應的版本和路徑,小程序對應的版本和剛剛瀏覽器的不一樣 #小程序的進程還是剛剛的命令就能查詢的到 desired_caps['chromedriverExecutable']='/Users/chenghaoai/Desktop/appium/chromedriver' desired_caps['noReset']=True desired_caps['chromeOptions']={'androidProcess':'com.tencent.mm:appbrand0'} driver.swipe(493,646,497,1437) #頁面下滑進入小程序列表 t1=t1=TouchAction(driver) t1.tap(x=176,y=416).perform() #通過坐標點擊拼多多 time.sleep(5) con1=driver.contexts #獲取webview print('當前頁面的context是:{}'.format(con1)) driver.switch_to.context('WEBVIEW_com.tencent.mm:appbrand0') #選擇對應的 print("切換成功") time.sleep(5) hand1=driver.window_handles #獲取窗口 print('當前頁面handles為:{}'.format(hand1)) for x in hand1: #這里因為實際有好幾個窗口,所以用循環來遍歷 driver.switch_to.window(x) if "拼多多" in driver.page_source: break print("成功") time.sleep(3) driver.find_element_by_xpath('//wx-view[text()="女裝"]').click() time.sleep(1) driver.find_element_by_xpath('//wx-view[text()="百億補貼" and @class="x-93--title"]').click() time.sleep(3) driver.switch_to.context('NATIVE_APP') driver.press_keycode(4) time.sleep(1) driver.press_keycode(4) #driver.find_element_by_xpath('//*[@content-desc="返回"]').click() driver.find_element_by_xpath('//*[@text="微信"]').click()
以上。