Appium案例之webview、小程序篇


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() 

 

以上。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM