appium的元素定位是什么

今天就跟大家聊聊有關(guān)appium的元素定位是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

我們提供的服務(wù)有:成都網(wǎng)站制作、成都做網(wǎng)站、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、庫車ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的庫車網(wǎng)站制作公司

下面從工具介紹以及定位策略來簡(jiǎn)單介紹下如何去對(duì)一個(gè)元素進(jìn)行定位.

常用工具介紹
工具    支持平臺(tái)    說明
appium-inspector    android,iOS native    官方appium-desktop安裝包自帶, 命令行安裝沒有該工具
app-inspector    android,iOS native    阿里開源的macaca框架帶的工具, 可以單獨(dú)安裝:
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 啟動(dòng)使用;
常用定位策略
通用定位策略(適用于全平臺(tái)):
findElement(s)ByName;
findElementById;
findElement(s)ByClassName
findElement(s)ByXPath
以上4種是非?;A(chǔ)的定位策略,不多做介紹, 其中XPath的定位方式稍微復(fù)雜, 讀者可以熟悉下xpath的語法, 會(huì)有很大幫助;

Android獨(dú)有定位策略:
findElement(s)ByAndroidUIAutomator 
該定位方式其實(shí)就是通過UIautomator框架的UISelector定位方式轉(zhuǎn)化為來, 如果對(duì)UISelector比較熟悉, 這個(gè)理解起來就很簡(jiǎn)單了;
介紹幾種簡(jiǎn)單的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(\"測(cè)試\"))");
1
2
iOS獨(dú)有定位策略:
findElement(s)ByIosUIAutomation, 僅在使用UIAutomation框架下有效
findElement(s)ByIosNsPredicate, 僅在使用XCUItest框架下有效, 是原生支持的定位策略 
通過元素的一種屬性或者多重屬性進(jìn)行定位, 元素的屬性包括type, value, name, label, enabled, visible;
元素定位的基本格式為: 屬性+運(yùn)算符+值形式
運(yùn)算符有比較運(yùn)算符>,<,==,>=,<=,!=, 范圍運(yùn)算符IN,BETWEEN, 字符串運(yùn)算符CONTAINS、BEGINSWITH、ENDSWITH, 也可以是使用通配運(yùn)算符LIKE
e.g:
driver.findElementByIosNsPredicate("type == XCUIElementTypeStaticText AND label CONTAINS '測(cè)試' AND enabled == true")
1
webview獨(dú)有定位策略
findElement(s)ByCssSelector
高級(jí)用法
級(jí)聯(lián)調(diào)用
級(jí)聯(lián)調(diào)用很好理解, 比如要通過A節(jié)點(diǎn)來查找A節(jié)點(diǎn)的子節(jié)點(diǎn)B, 即driver.findElementsByClassName(“a”).findElementByXpath(“b”);

pagefactory初始化元素
一般在做UI自動(dòng)化項(xiàng)目的時(shí)候肯定會(huì)分層封裝, 將頁面封裝成一個(gè)個(gè)頁面對(duì)象, 然后在業(yè)務(wù)處理代碼中直接調(diào)用頁面對(duì)象的方法, appium提供了Page Object design pattern.如下:

    @FindBy(id = "list")
    @AndroidFindBy(xpath = "//android.widget.ListView")
    @iOSXCUITFindBy(iOSNsPredicate = "type=='XCUIElementTypeScrollView'")
    MobileElement loanList;
1
2
3
4
以上代碼定義了一個(gè)MobileElement loanList 元素, 
1. 如果在webview下就是用driver.findElementByid("list")尋找該元素, 
2. 如果在android native下則使用driver.findElementByXpath("//android.widget.ListView")尋找該元素, 
3. 如果在ios native下則使用driver.findElementByiOSNsPredicate("type=='XCUIElementTypeScrollView'")

短短4行代碼就解決了跨平臺(tái)尋找元素的問題, 甚至可以為該元素添加一個(gè)@WithTimeout注解, 為該元素設(shè)置一個(gè)implicit time, 解決元素加載慢導(dǎo)致的NosuchElementException;

編寫好了元素定位的策略之后, 就需要初始化該頁面元素對(duì)象, appium提供了多種元素初始化的方法, 例如:

PageFactory.initElements(new AppiumFieldDecorator(driver, 1000, TimeUnit.MILLISECONDS), this);
1
使用該方法即可初始化剛才的元素定位代碼, 然后就可以直接操作元素loanList而無需額外其他操作;

這樣一來代碼非常簡(jiǎn)潔清晰, 后期就算元素變化頻繁, 也只需要修改元素定位策略的3行代碼, 提高了代碼的可維護(hù)性, 減少了維護(hù)成本;
   

看完上述內(nèi)容,你們對(duì)appium的元素定位是什么有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

分享名稱:appium的元素定位是什么
本文網(wǎng)址:http://muchs.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)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)