Appium實(shí)現(xiàn)滾動(dòng)到指定控件的元素的方法——findElementByAndroidUIAutomator

由于Appium簡(jiǎn)單的定位語(yǔ)句無(wú)法實(shí)現(xiàn)滾動(dòng)屏幕到指定控件的元素,如一個(gè)text內(nèi)容為“Display”的控件不在當(dāng)前屏幕疮方,需要向下滾動(dòng)才能查看時(shí),我們就需要使用findElementByAndroidUIAutomator方法双饥,通過(guò)嵌入U(xiǎn)iAutomator語(yǔ)句才能實(shí)現(xiàn)向下滾動(dòng)到“Display”控件處

完整代碼如下

package com.hq.prodreamer;

import java.net.URL;
import java.util.concurrent.TimeUnit;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;

import io.appium.java_client.android.AndroidDriver;

/**    
 *     
 * 項(xiàng)目名稱(chēng):Display    
 * 類(lèi)名稱(chēng):Display    
 */
public class Display
{
    
    
    private AndroidDriver driver;
    
    @Before
    public void setUp()
        throws Exception
    {
        
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("deviceName", "Android Devices");
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("platformVersion", "7.0");
        capabilities.setCapability("udid", "0123456789ABCDEF");
        capabilities.setCapability("appPackage", "com.android.settings");
        capabilities.setCapability("appActivity", ".Settings");
        capabilities.setCapability("NoReset", true);
        driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
        System.out.println("啟動(dòng)應(yīng)用叫潦!");
    }
    
    
    @After
    public void tearDown()
        throws Exception
    {
        driver.quit();
        System.out.println("退出driver!");
    }
    
    @Test
    public void test()
    {
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        WebElement webElement = driver.findElementByAndroidUIAutomator(
            "new UiScrollable(new UiSelector().scrollable(true)).scrollIntoView(new UiSelector().text(\"Display\"))");
        //使用scrollIntoView方法實(shí)現(xiàn)滾動(dòng)到指定控件元素
        System.out.println("scroll!");
        webElement.click();
        System.out.println("click!");
    }
    
}

嵌入的語(yǔ)句里爸邢,我們用到的是UiScrollable對(duì)象的scrollIntoView方法巫员,scrollIntoView 是一個(gè)特例,會(huì)返回滾動(dòng)到指定控件的元素甲棍。
scrollIntoView 對(duì)任何的 UiSelector 都可以執(zhí)行滾動(dòng)操作简识。

由于這個(gè)語(yǔ)句過(guò)長(zhǎng)赶掖,并且需要經(jīng)常使用,索性就把UiAutomator常用的幾種定位方式寫(xiě)成一個(gè)工具類(lèi)Appium工具類(lèi)方法七扰,如下

/**    
 * 文件名:AppiumUtil.java    
 *    
 * 版本信息:    
 * 日期:2018年4月10日    
 * Copyright 足下 Corporation 2018     
 * 版權(quán)所有    
 *    
 */
package com.hq.prodreamer;

/**    
 *     
 * 項(xiàng)目名稱(chēng):適用于所有項(xiàng)目    
 * 類(lèi)名稱(chēng):AppiumUtil    
 * 類(lèi)描述:    
 * 創(chuàng)建時(shí)間:2018年4月10日 下午4:16:52    
 * 修改時(shí)間:2018年4月10日 下午4:16:52    
 * 修改備注:    
 * @version     
 *     
 */
public class AppiumUtil
{
    // find element by name
    public static final String NAME = "NAME";
    
    // find element by id
    public static final String ID = "ID";
    
    // find element by classname
    public static final String CLASSNAME = "CLASSNAME";
    
    // find element by AccessibilityId
    public static final String ACCESSIBILITYID = "AccessibilityId";
    
    public static final String INDEX = "INDEX";
    
    public static final String INSTENCE = "INSTENCE";
    
    // name,id,AccessibilityId method
    public String scrollTo(String content, String type)
    {
        String uiautomatorStr = null;
        
        if (type == "NAME")
        {
            uiautomatorStr =
                "new UiScrollable(new UiSelector().scrollable(true)).scrollIntoView(new UiSelector().text(\"" + content
                    + "\"))";
        }
        
        else if (type == "ID")
        {
            uiautomatorStr =
                "new UiScrollable(new UiSelector().scrollable(true)).scrollIntoView(new UiSelector().resourceId(\""
                    + content + "\"))";
        }
        
        else if (type == "AccessibilityId")
        {
            uiautomatorStr =
                "new UiScrollable(new UiSelector().scrollable(true)).scrollIntoView(new UiSelector().description(\""
                    + content + "\"))";
        }
        return uiautomatorStr;
    }
    
    // className method
    public String scrollTo(String content, String className, String type, int number)
    {
        String uiautomatorStr = null;
        
        // find element by classname && index
        if (className == "CLASSNAME" && type == "INDEX")
        {
            uiautomatorStr = "new UiScrollable(new UiSelector().scrollable(true).index(" + number
                + ")).getChildByText(new UiSelector().className(\"" + content + "\")";
        }
        // find element by classname && instance
        else if (className == "CLASSNAME" && type == "INSTENCE")
        {
            uiautomatorStr = "new UiScrollable(new UiSelector().scrollable(true).instance(" + number
                + ")).getChildByText(new UiSelector().className(\"" + content + "\")";
        }
        return uiautomatorStr;
    }
}

AppiumUtil是本人針對(duì)常用的方法奢赂、屬性編寫(xiě)的工具類(lèi),以上代碼只是初期代碼颈走,后續(xù)會(huì)根據(jù)個(gè)人需要進(jìn)行修改膳灶。
文章屬于個(gè)人見(jiàn)解,如有錯(cuò)誤立由,歡迎指出轧钓。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市锐膜,隨后出現(xiàn)的幾起案子毕箍,更是在濱河造成了極大的恐慌,老刑警劉巖道盏,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件而柑,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡荷逞,警方通過(guò)查閱死者的電腦和手機(jī)媒咳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)种远,“玉大人涩澡,你說(shuō)我怎么就攤上這事∽狗螅” “怎么了妙同?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)常拓。 經(jīng)常有香客問(wèn)我渐溶,道長(zhǎng),這世上最難降的妖魔是什么弄抬? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任茎辐,我火速辦了婚禮,結(jié)果婚禮上掂恕,老公的妹妹穿的比我還像新娘拖陆。我一直安慰自己,他們只是感情好懊亡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布依啰。 她就那樣靜靜地躺著,像睡著了一般店枣。 火紅的嫁衣襯著肌膚如雪速警。 梳的紋絲不亂的頭發(fā)上叹誉,一...
    開(kāi)封第一講書(shū)人閱讀 51,274評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音闷旧,去河邊找鬼长豁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛忙灼,可吹牛的內(nèi)容都是我干的匠襟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼该园,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼酸舍!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起里初,我...
    開(kāi)封第一講書(shū)人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤啃勉,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后青瀑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體璧亮,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡萧诫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年斥难,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帘饶。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哑诊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出及刻,到底是詐尸還是另有隱情镀裤,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布缴饭,位于F島的核電站暑劝,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏颗搂。R本人自食惡果不足惜担猛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丢氢。 院中可真熱鬧傅联,春花似錦、人聲如沸疚察。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)貌嫡。三九已至比驻,卻和暖如春该溯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背别惦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工朗伶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人步咪。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓论皆,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親猾漫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子点晴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 用到的組件 1、通過(guò)CocoaPods安裝 2悯周、第三方類(lèi)庫(kù)安裝 3粒督、第三方服務(wù) 友盟社會(huì)化分享組件 友盟用戶(hù)反饋 ...
    SunnyLeong閱讀 14,613評(píng)論 1 180
  • 簡(jiǎn)介:林洛屠橄,林家二小姐,富商之女闰挡,在這滿(mǎn)是俊男靚女的臨霖國(guó)锐墙,她卻長(zhǎng)了一張平凡之容,這也成了长酗,百姓飯后笑點(diǎn)溪北,可是讓他...
    問(wèn)問(wèn)晚閱讀 188評(píng)論 0 1
  • “初見(jiàn)的時(shí)候 沒(méi)想過(guò) 后來(lái)會(huì)這么喜歡你[em]e400125[/em]”
    俊境閱讀 220評(píng)論 0 0
  • 測(cè)試條件:華為6.0 測(cè)試就是簡(jiǎn)單的幾個(gè)Activity跳轉(zhuǎn) 1)首先在打開(kāi)的頁(yè)面中第二個(gè)頁(yè)面奔潰 1.1 如果我...
    HEHE_fang閱讀 604評(píng)論 0 0
  • 文 / 蔡森森 您愛(ài)喝咖啡嗎咧叭?喜歡酸味還是苦味重一點(diǎn)的呢蚀乔?鍾情黑咖啡、奶味重一點(diǎn)的拿鐵菲茬、還是添加巧克力的摩卡咖啡吉挣?...
    蔡森森閱讀 1,430評(píng)論 6 5