1. 程式人生 > >使用webview查詢元素,appium查詢web頁面元素

使用webview查詢元素,appium查詢web頁面元素

9 webview查詢元素

9.1 webview 簡介

     WebView是android中一個非常重要的控制元件,它的作用是用來展示一個web頁面。它使用的核心是webkit引擎,4.4版本之後,直接使用Chrome作為內建網頁瀏覽器。

9.2 移動端應用

移動端,一般分為三種應用:

Native應用:就是安卓的原生應用,普通APP。檔案自帶的檔案管理、設定等APP

Web應用:需要依託瀏覽器展示的網頁應用,比如微信裡的公眾號、商城

混合應用:也就是結合了原生和網頁應用,在原生應用中嵌入網頁。很多APP都是這樣的,比如淘寶等

 

那麼為什麼是要使用webview呢?前面第二章講過UIAutomatorViewer的使用,UIAutomatorViewer是用來識別安卓原生應用的,它識別不到web網頁的內容。所以如果你要測試的APP有網頁應用,就需要用到webview來識別控制元件的id、name等資訊。

ps:如果確定這個APP的頁面是不是網頁,一般情況下,長按文字可以出現複製貼上的,網路不好的時候會出現一個緩慢載入的過程等一般都是web應用。

9.3使用webview查詢元素

第一種方式需要FQ:

1.將手機連線到電腦上,開啟USB除錯,去cmd中輸入adb devices會顯示你的裝置已連線 

 

2.然後你開啟要測試的網頁版的APP,比如我開啟微信裡的一個商城

3.從電腦端,開啟chrome瀏覽器,輸入chrome://inspect,開啟,會顯示你的手機型號,以及你開啟的網頁

 

        注意:1.如果你查詢的不是web網頁,webview是不會顯示的,所以如果沒顯示,首先看下自己的頁面是不是網頁版;2.如果連手機型號都沒出來,那說明手機沒有連線上,重新關閉usb除錯再開啟試試,還是不行確定一下自己的驅動是不是裝好了;3.這個只能適用安卓4.4版本以上的手機

4.點選inspect,就會出來如圖:

 

 

5.點選圖中的箭頭,左側是頁面,右側顯示的是控制元件的資訊。想看哪個APP,在手機上開啟哪個APP即可。

如果不能FQ,還有一個方法就是將網頁連結複製到電腦的瀏覽器,從電腦瀏覽器開啟網頁,點選右鍵--檢查/檢視元素,也可以找到元素資訊。和之前selenium一樣。

9.4 appium查詢網頁元素

 

找到了元素資訊後,如何寫程式碼讓appium自動去找呢?

 

連線手機的程式碼和find_element_XX都是一樣的,只是有一個地方需要注意,appium預設都是按照原生應用查詢的,如果想讓它查詢網頁應用,就要告訴它接下來要查詢網頁應用了,用switch_to.context()方法:

#coding=utf-8
from appium import webdriver
import time

"""連線手機,獲取driver"""
server = r'http://localhost:4723/wd/hub'  # Appium Server, 埠預設為4723
desired_capabilities = {
    'platformName': 'Android',
    'deviceName': '127.0.0.1:62001',
    'platformVersion': '10',
    'appPackage': 'com.ddsy.songyao',
    'appActivity': '.activity.MainActivity',
    'unicodeKeyboard': True,
    'reserKeyBoard': True,
    'noReset': True,
    'fullReset': False
}
driver = webdriver.Remote(server, desired_capabilities)  # 連線手機和APP
time.sleep(3)

# 點選首頁某個元素進入到某個網頁版頁面
driver.find_element_by_xpath("//*[contains(@bounds, '[360,676][720,837]')]").click()
time.sleep(5)

# 獲取當前網頁頁面的contexts
contexts = driver.contexts
for i in contexts:
    print(i)

# 列印的contexts結果:
# NATIVE_APP         # 一般情況原生的應用都是這個context
# WEBVIEW_com.android.browser
# 網頁應用的context都是‘WEBVIEW_’開頭的
# 如果你的當前頁面是原生的,那麼只會打出來NATIVE_APP

# 告訴appium接下來找到元素是網頁的元素

driver.switch_to.context("WEBVIEW_com.android.browser")
# 下面的方法就一樣了driver.find_element_by_id("網頁元素的id").click()driver.find_element_by_xpath("//*[contains(@text, 'xxx").sendkeys('xx')

#接下來回到原生應用driver.switch_to.context("NATIVE_APP")driver.find_element_by_id("安卓原生的id")

&n