91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

appium的元素定位是什么

發布時間:2021-10-19 17:15:13 來源:億速云 閱讀:190 作者:柒染 欄目:大數據

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

下面從工具介紹以及定位策略來簡單介紹下如何去對一個元素進行定位.

常用工具介紹
工具    支持平臺    說明
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種是非常基礎的定位策略,不多做介紹, 其中XPath的定位方式稍微復雜, 讀者可以熟悉下xpath的語法, 會有很大幫助;

Android獨有定位策略:
findElement(s)ByAndroidUIAutomator 
該定位方式其實就是通過UIautomator框架的UISelector定位方式轉化為來, 如果對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框架下有效, 是原生支持的定位策略 
通過元素的一種屬性或者多重屬性進行定位, 元素的屬性包括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
高級用法
級聯調用
級聯調用很好理解, 比如要通過A節點來查找A節點的子節點B, 即driver.findElementsByClassName(“a”).findElementByXpath(“b”);

pagefactory初始化元素
一般在做UI自動化項目的時候肯定會分層封裝, 將頁面封裝成一個個頁面對象, 然后在業務處理代碼中直接調用頁面對象的方法, 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注解, 為該元素設置一個implicit time, 解決元素加載慢導致的NosuchElementException;

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

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

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

看完上述內容,你們對appium的元素定位是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

翁源县| 钦州市| 西乌珠穆沁旗| 万山特区| 府谷县| 清涧县| 天峨县| 新泰市| 罗田县| 中阳县| 措美县| 无锡市| 津南区| 达州市| 南陵县| 台中市| 阳东县| 铁岭县| 潢川县| 辽中县| 北安市| 天等县| 永登县| 六枝特区| 抚顺市| 青田县| 新昌县| 菏泽市| 县级市| 醴陵市| 新邵县| 长治县| 威宁| 天水市| 湘潭县| 崇仁县| 萝北县| 岳普湖县| 读书| 万载县| 靖远县|