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 @]').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()
以上,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/264395.html
標籤:其他
