今天就跟大家聊聊有關(guān)appium的元素定位是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
我們提供的服務(wù)有:成都網(wǎng)站制作、成都做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、庫車ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的庫車網(wǎng)站制作公司
下面從工具介紹以及定位策略來簡單介紹下如何去對一個元素進(jìn)行定位.
常用工具介紹
工具 支持平臺 說明
appium-inspector android,iOS native 官方appium-desktop安裝包自帶, 命令行安裝沒有該工具
app-inspector android,iOS native 阿里開源的macaca框架帶的工具, 可以單獨安裝:
npm install -g app-inspector
UIAutomatorviewer android native android sdk自帶工具軟件
Chrome Inspect android,iOS webview android webview可以直接使用, iOS webview需要安裝ios-webkit-debug-proxy,
并且以ios_webkit_debug_proxy -f chrome-devtools://devtools/bundled/inspector.html 啟動使用;
常用定位策略
通用定位策略(適用于全平臺):
findElement(s)ByName;
findElementById;
findElement(s)ByClassName
findElement(s)ByXPath
以上4種是非?;A(chǔ)的定位策略,不多做介紹, 其中XPath的定位方式稍微復(fù)雜, 讀者可以熟悉下xpath的語法, 會有很大幫助;
Android獨有定位策略:
findElement(s)ByAndroidUIAutomator
該定位方式其實就是通過UIautomator框架的UISelector定位方式轉(zhuǎn)化為來, 如果對UISelector比較熟悉, 這個理解起來就很簡單了;
介紹幾種簡單的UISelector定位方式, new UiSelector.resourceId(), new UISelector.text, new UISelector.className()
e.g:
driver.findElementByAndroidUIAutomator("new UiSelector().className(\"android.widget.ImageView\").clickable(true)");
driver.findElementByAndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true)).scrollIntoView(new UiSelector().textContains(\"測試\"))");
1
2
iOS獨有定位策略:
findElement(s)ByIosUIAutomation, 僅在使用UIAutomation框架下有效
findElement(s)ByIosNsPredicate, 僅在使用XCUItest框架下有效, 是原生支持的定位策略
通過元素的一種屬性或者多重屬性進(jìn)行定位, 元素的屬性包括type, value, name, label, enabled, visible;
元素定位的基本格式為: 屬性+運算符+值形式
運算符有比較運算符>,<,==,>=,<=,!=, 范圍運算符IN,BETWEEN, 字符串運算符CONTAINS、BEGINSWITH、ENDSWITH, 也可以是使用通配運算符LIKE
e.g:
driver.findElementByIosNsPredicate("type == XCUIElementTypeStaticText AND label CONTAINS '測試' AND enabled == true")
1
webview獨有定位策略
findElement(s)ByCssSelector
高級用法
級聯(lián)調(diào)用
級聯(lián)調(diào)用很好理解, 比如要通過A節(jié)點來查找A節(jié)點的子節(jié)點B, 即driver.findElementsByClassName(“a”).findElementByXpath(“b”);
pagefactory初始化元素
一般在做UI自動化項目的時候肯定會分層封裝, 將頁面封裝成一個個頁面對象, 然后在業(yè)務(wù)處理代碼中直接調(diào)用頁面對象的方法, appium提供了Page Object design pattern.如下:
@FindBy(id = "list")
@AndroidFindBy(xpath = "//android.widget.ListView")
@iOSXCUITFindBy(iOSNsPredicate = "type=='XCUIElementTypeScrollView'")
MobileElement loanList;
1
2
3
4
以上代碼定義了一個MobileElement loanList 元素,
1. 如果在webview下就是用driver.findElementByid("list")尋找該元素,
2. 如果在android native下則使用driver.findElementByXpath("//android.widget.ListView")尋找該元素,
3. 如果在ios native下則使用driver.findElementByiOSNsPredicate("type=='XCUIElementTypeScrollView'")
短短4行代碼就解決了跨平臺尋找元素的問題, 甚至可以為該元素添加一個@WithTimeout注解, 為該元素設(shè)置一個implicit time, 解決元素加載慢導(dǎo)致的NosuchElementException;
編寫好了元素定位的策略之后, 就需要初始化該頁面元素對象, appium提供了多種元素初始化的方法, 例如:
PageFactory.initElements(new AppiumFieldDecorator(driver, 1000, TimeUnit.MILLISECONDS), this);
1
使用該方法即可初始化剛才的元素定位代碼, 然后就可以直接操作元素loanList而無需額外其他操作;
這樣一來代碼非常簡潔清晰, 后期就算元素變化頻繁, 也只需要修改元素定位策略的3行代碼, 提高了代碼的可維護(hù)性, 減少了維護(hù)成本;
看完上述內(nèi)容,你們對appium的元素定位是什么有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
分享名稱:appium的元素定位是什么
本文網(wǎng)址:http://www.rwnh.cn/article40/ippdeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、網(wǎng)站營銷、外貿(mào)建站、搜索引擎優(yōu)化、品牌網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)