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


9 webview查找元素

9.1 webview 簡介

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

9.2 移動端應用

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

Native應用:就是安卓的原生應用,普通APP。文件自帶的文件管理、設置等APP

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

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

 

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

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

 


免責聲明!

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



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