1. 程式人生 > >Appium+python(3):解決APP內嵌H5頁面元素無法定位問題

Appium+python(3):解決APP內嵌H5頁面元素無法定位問題

測試app的時候,我們知道可以通過UI Automator Viewer進行元素定位

但是很多app中都會內嵌h5頁面,這個時候定位就會變成下圖這樣:


只能定位整個頁面,無法定位到單獨的元素。那麼怎麼才能夠定位到h5頁面的元素呢。(1)打印出當前手機頁面的context
print driver.contexts
如果包含有h5頁面的話,一般至少會返回兩個元素,如
[u'NATIVE_APP', u'WEBVIEW_com.test.jiayuan']

 (2)切換到H5頁面

driver.execute(MobileCommand.SWITCH_TO_CONTEXT, {"name": "WEBVIEW_com.test.jiayuan"})
可將頁面切換封裝成對應的函式
def switch_h5(self):
        self.driver.execute(MobileCommand.SWITCH_TO_CONTEXT, {"name": "WEBVIEW_com.weizq"})

def switch_app(self):
        self.driver.execute(MobileCommand.SWITCH_TO_CONTEXT, {"name": "NATIVE_APP"})
(3)確認是否已經成功切換,列印當前的context
print driver.current_context
結果為:WEBVIEW_com.test.jiayuan(4)列印當前頁面的page_source
print driver.page_source
注:一定要確認page_source是否為需測試的h5頁面,可以根據該H5頁面的文字在輸出結果中ctrl+F查詢,如果查詢不到,則說明頁面切換有問題,更不用指望能夠成功定位元素了。我就入過坑,在使用oppo手機測試時,我切換到了h5頁面,並且列印當前context確實是正確的,但是定位元素時卻始終找不到元素,以為是元素定位方式不對,從name到css到xpath都無解,然後打印出切換後的page_source,檢視真的也找不到我需要定位的元素!

但是我明明是切到了h5頁面了啊!百思不得其解啊!

後來將

driver.execute(MobileCommand.SWITCH_TO_CONTEXT, {"name": "WEBVIEW_com.test.jiayuan"})
改成
driver.execute(MobileCommand.SWITCH_TO_CONTEXT, {"name": "NATIVE_APP"})
奇蹟出現了,切換到NATIVE_APP後,打印出來的page_source竟然是h5頁面的原始碼,簡直要一口老血噴出來,竟然是反著來的。後面元素定位也理所當然順順利利的實現了。不知道這個問題是因為特定的APP造成的,還是其他什麼原因,其他的朋友如果也遇到這樣的問題,可以按照以上方法試下,看下是否同樣可以解決問題。

相關推薦

Appium+python3解決APPH5頁面元素無法定位問題

測試app的時候,我們知道可以通過UI Automator Viewer進行元素定位但是很多app中都會內嵌h5頁面,這個時候定位就會變成下圖這樣:只能定位整個頁面,無法定位到單獨的元素。那麼怎麼才能夠定位到h5頁面的元素呢。(1)打印出當前手機頁面的contextprint

新手學python3yield與序列化

1 Yield生成器        Yield是我在其他語言中沒有見過的一個屬性,算是python的一大特色,用好之後可以使程式碼更簡潔。考慮一個簡單的例子,檔案的遍歷。要遍歷一個目錄下的所有檔案需要遞迴的操作。如果我們只是單純的列印檔名,我們可以在遞迴的過程中完成,每當發

菜鳥學Python3引用和引用引數

  在Python.cn的郵件列表中看到有人問了一個問題: >>> a=[]>>> b={'num':0,'sqrt':0}>>> resurse=[1,2,3]>>>for i in resurse: b['num']=i b['sq

每日一python3python 中對list去重的兩種方法

在python相關職位的面試過程中,會對列表list的去重進行考察。(注意有時會要求保證去重的順序性) 方法1:直觀方法 思路:先建立一個新的空列表,通過遍歷原來的列表,再利用邏輯關係not in 來去重 程式碼: #coding:utf-8 ll = [

小白學 Python3基礎資料型別

人生苦短,我選Python 引言 前文傳送門 小白學 Python(1):開篇 小白學 Python(2):基礎資料型別(上) 前面我們介紹過了數字,本篇我們接著聊另一個常用的基礎資料型別:字串。 什麼是字串? 字串是由字元組成的一串有限序列,如: 'geekdigging' 、 "geek

Python遞迴+建函式+第三方模組+md5加密+操作mysql

遞迴 定義:遞迴就是函式自己呼叫自己,最多可迴圈呼叫999次  內建函式 1、sorted()排序,生成的是列表 2、map()幫你迴圈呼叫函式的,儲存返回值,返回的是一個list。map接受一個函式名和序列 3、filter:過濾器,幫你迴圈呼叫函式,如果函式返回fa

解決apph5中ios獲取不到title,vue router 修改titleIOS 下動態改變title失效

在ios下app  設定document.title = "titleName" 失效,原因是在IOS webview中網頁標題只加載一次,動態改變是無效的。 vue中npm install  vue-wechat-title元件 在路由配置中新增  meta物件 如:

apph5頁面問題總結

kit 內嵌 當前 播放 ren 發的 blog 設置 time 一、<audio> 1.ios上只能播放mp3文件格式的音頻 2.fis+smarty開發的靜態頁,將音頻文件寫死時,js設置當前播放時間(currentTime)失效,每次賦值都自動歸零。後來音

AppH5頁面聯調接口

接口 isa android func all mac os x indexof cpu os x //分享接口 function ShareLp(query,pkid){ var shareUrl=""; var shareImg=""; var shareT

app h5頁面 再滑動的時候 觸發擊穿底下的一些touchstart事件

control touch .com images click remove rem screen close 我們的目的是再滑動的時候 不要觸發到touchstart事件。 // 再滑動的時候無法點開視頻

ios下apph5頁面是video適配問題

ios下做新聞詳情用h5頁面實現然後打包到app中,其中新聞詳情頁會有視訊,安卓下video的poster可以做到適應video大小,但是ios下會按照poster圖片大小將video等比撐大,但是視訊顯示不全(超出手機寬度),原始poster圖片大小是750x420嘗試諸多方法包括設定object-fit:

APPh5頁面如何分享到微信?

一個APP內嵌入H5頁面,H5頁面有個分享微信的按鈕,點選這個按鈕可以將這個H5頁面分享到微信。從技術上看可行嗎? 就目前而言,具體實現有這幾個方法: 1、通過微信內建的SDK可以實現其分享 2、native裡面的share可以實現 3、應用第三方外掛可以實現 4、你巢狀在APP裡面的,你也可以讓APP開發

python基礎3輸入輸出與運算符

http 占位符 str png blog 方法 image 16px 提示 今天總結一下最基礎的輸入輸出和運算符 輸入: python3裏都是input("") input() name = input() #輸入的值會直接賦值給name name = i

PYTHON設計模式學習3Singleton pattern

blog ora 參考 擁有 沒有 _屬性 ces cti ttr 參考了其他的博客:http://ghostfromheaven.iteye.com/blog/1562618 #-*- encoding=utf-8 -*- print ‘--------------

Python開發環境3使用Eclipse+PyDev插件創建Django項目

ffffff postgresq 項目上線 右鍵 ont pat iat ngs ora OS:Windows 10家庭中文版,Python:3.6,Eclipse:Oxygen.1a Release (4.7.1a), PyDev:6.3.2,Django:2.0.3

Python從菜鳥到高手3聲明變量

ble href edi 一個 android 聲明變量 字符串類型 的人 重要 變量(variable)是Python語言中一個非常重要的概念。變量的主要作用就是為Python程序中的某個值起一個名字。類似於“張三”、“李四”、“王二麻子”一樣的人名,便於記憶。 ??在P

Python基礎3元組

tuple,元組,python內建的一種資料型別,是一種有序集合,是不可變物件,不能進行增刪改查操作。 1,元組的定義 t=()                  #定義一個空的元組 t=(1,2,'he

標號3python(就業階段)——Linux系統命令2——《遠端登入和遠端拷貝》

二、遠端登入和遠端拷貝 <1>ssh介紹 >(1)SSH(Secure Shell)是專為遠端登入會話和其他網路服務提供安全性的協議。常用於遠端登入,以及使用者之間進行資料拷貝。 (2)SSH 為建立在應用層和傳輸層基礎上的安全協議。 (3)利用SSH協議可以有效防止遠端管

python數字影象處理3影象畫素的訪問與裁剪

圖片讀入程式中後,是以numpy陣列存在的。因此對numpy陣列的一切功能,對圖片也適用。對陣列元素的訪問,實際上就是對圖片畫素點的訪問。 彩色圖片訪問方式為: img[i,j,c] i表示圖片的行數,j表示圖片的列數,c表示圖片的通道數(RGB三通道分別對應0,1

ApolloStudio高手之路3Python以最優雅簡潔的方式讀寫支援Modbus RTU/TCP協議的裝置資料

縱觀整個工業界生態鏈,可能Modbus協議(包括了通過串列埠方式連線的Modbus RTU協議和通過網路傳輸的Modbus TCP協議,這裡統稱為Modbus)作為一種工業領域通訊協議的業界標準在所有裝置互聯的協議群中獨佔鰲頭,也許正是因為其相較與其他協議的優越性(1.公開發表並且無版權要求;2