七 Appium常用方法介紹

來源:互聯網
上載者:User

標籤:核心   複選框   擷取   check   tor   啟用   load   appium   element   

文本轉自:http://www.cnblogs.com/sundalian/p/5629609.html

 

由於appium是擴充了Webdriver協議,所以可以使用webdriver提供的方法,比如在處理webview頁面,完全可以使用webdriver中的方法。當然在原生應用中,也可以使用。

 

1.元素相關方法

 

1.1點擊操作
WebElement button = driver.findElement(By.id(“login”));

或者

WebElement button = driver.findElementById(“login”)//然後執行點擊操作button.click();

由元素對象調用click()方法。

 

1.2清除操作
WebElement username = driver.findElement(By.name(“username_input”));

或者

WebElement username = driver.findElementName(“username_input”);username.clear();

當執行這個方法的時候,輸入框的內容會被清空。

 

1.3獲得元素屬性的值

getAttribute(java.lang.String name)這個方法。

代碼如下:

WebElement username = driver.findElement(By.id(“u”));

或者

WebElement username = driver.findElementId(“u”);username. getAttribute(“XXXXX”);

這樣就可以獲得XXXX = “abc”,abc的值了

 

1.4擷取元素文本

登入按鈕的源碼:

<button class="btn btn-major" id="loginBtn" type="button">登入</button>

WebElement中提供一個getText()方法可以擷取,代碼如下:

WebElement login= driver.findElement(By.id(“loginBtn”));

或者

WebElement login= driver.findElementId(“loginBtn”);login.getText();

這樣就能擷取“登入”文字了。

對於原生APP,使用的方法是一樣的,直接用元素對象引用getText方法即可。

 

1.5元素是否顯示

判斷這個頁面元素是不是顯示出來了。

方法有個傳回值類型是boolean,也就是說如果元素顯示了返回true,如果沒有顯示返回false。

WebElement login= driver.findElement(By.id(“loginBtn”));

或者

WebElement login= driver.findElementId(“loginBtn”);//webview或者原生app都通用login.isDisplayed();

 

1.6元素是否被選擇

有這樣的情況,複選框或者是單選框,我們需要判斷這個框是不是被勾選了,此時這個方法就派上用場了。

WebElement checkbox= driver.findElement(By.id(“checkbox_id”));

或者

WebElement checkbox= driver.findElementId(“checkbox_id”);//webview和原生app通用checkbox.isSeelected();

checkbox.isSeelected();會有傳回值,如果勾選了,返回true,如果沒有勾選返回false。

 

1.7元素是否被啟用

有些按鈕,可能在頁面顯示上被灰掉,就是不讓點擊,這個時候這個按鈕是停用。那麼我們如何判斷這個按鈕是否能被點擊呢?請用isEnabled()方法

WebElement login= driver.findElement(By.id(“loginBtn”));

或者

WebElement login= driver.findElementById(“loginBtn”);//webview和原生app通用login. isEnabled ();

如果可用返回true,如果不可用返回false。

 

1.8提交操作

在有表單的的介面上,可以不通過點擊按鈕進行提交操作,這就需要用到submit()方法

比如一個webview元素的源碼:

<button class="btn btn-major" id="loginBtn" type="submit">登入</button>

此源碼需要在一個表單(Form)中,並且type需要時submit類型,此時我們的代碼可以這樣寫:

WebElement login= driver.findElement(By.id(“loginBtn”));

或者

WebElement login= driver.findElementById(“loginBtn”);//webview和原生的app 提交按鈕通用login. submit();

 

2.webview中iframe的處理

在混合應用APP中的webview頁面中也會遇到frame的情況,處理情況和web頁面中的frame處理一樣。

selenium webdriver中提供了進入一個iframe的方法:

WebDriver org.openqa.selenium.WebDriver.TargetLocator.frame(String nameOrId)

也提供了一個返回default content的方法:

WebDriver org.openqa.selenium.WebDriver.TargetLocator.defaultContent()

核心代碼:

driver.switchTo().frame(“XXX”); //傳入的是iframe的ID

如果要返回到以前的預設content,可以使用:

dr.switchTo().defaultContent();

 

3.下拉框選值

webview下拉框操作:先定位出你要處理的下拉框(元素),然後將此元素傳入Select對象中,接著用Select中的相關方法來選取下拉值。

我們先要定位這個Select下拉框(元素)

WebElement element_province = driver.findElement(By.id(“province”));

然後把element傳入Select

Select province = new Select(element_province);

然後由Select來操作下拉框

province.selectByIndex(0) //province .selectByVisibleText(“XXX”)

 

4.alert處理
@Testpublic void handleAlert() throws InterruptedException {WebElement showAlert= driver.findElement(By.name("Show Alert"));//點擊之後彈出alert視窗showAlert.click();WebElement yes=driver.findElement(By.name("Yes"));//點擊yes按鈕之後alert視窗消失yes.click();//暫停4秒觀察顯示Thread.sleep(4000);}

Alert我們無法用selenium alert api處理 ,我們使用的是直接找到按鈕的方式。這樣就可以找到Yes按鈕,然後點擊yes按鈕即可。

 

5.滾動和滑動

 

5.1滾動操作

實現代碼:

@Testpublic void scroll() throws InterruptedException {//滑動直到尋找到Edriver.scrollToExact("E");}

 

5.2滑動操作
@Testpublic void swipe() throws InterruptedException {Thread.sleep(1000);TouchAction tAction=new TouchAction(driver);tAction.press(400,500).waitAction(800).moveTo(50,500).release().perform();Thread.sleep(4000);}

其中的核心代碼是:

TouchAction tAction=new TouchAction(driver);  tAction.press(400,500).waitAction(800).moveTo(50,500).release().perform();

使用的是TouchAction類,首先調用press方法,然後加上等待動作的緩衝時間800毫秒,接著移動到座標(moveTo),當移動到指定座標點的時候,鬆開手。最後調用perform方法就可執行整個操作。

 

6.等待元素載入

 

6.1 硬性等待

Thread.sleep(int sleeptime);

此方法會把當前的driver進程暫停一段時間,然後在執行接下來的操作。這方法有個缺點就是,你不能確定元素到底多久載入出來,如果你的sleepTimes是10秒,但是元素2秒就載入出來了,那麼此進程還會繼續等待8秒,造成時間浪費。所以非必要情況下不要使用此方法。

 

6.2智能等待
public void waitForElementToLoad(int timeOut, final By By) {        try {(new WebDriverWait(driver, timeOut)).until(new ExpectedCondition<Boolean>() {public Boolean apply(WebDriver driver) {WebElement element = driver.findElement(By);return element.isDisplayed();}});} catch (TimeoutException e) {Assert.fail("逾時!! " + timeOut + " 秒之後還沒找到元素 [" + By + "]",e);}}

此方法有兩個參數,timeOut是等待元素的逾時時間,就是說過了這個時間如果元素還沒載入出來就報錯。By對象,這個是你元素的定位方式比如By.id(“login”);

這個方法會在給定timeOut去尋找元素,如果在小於timeOut的時間內找到了元素,剩下的時間不在等待,直接執行接下來的操作。

 

6.3 設定等待頁面載入完畢
int pageLoadTime = 10;driver.manage().timeouts().pageLoadTimeout(pageLoadTime, TimeUnit.SECONDS);

這段代碼,載入driver.get(url)方法之前,他們等待你給定的時間,如果在給定時間內網頁還是沒有載入出來就會報錯,如果在小於給定時間內載入完畢了,剩下的時間不再等待。

 

7.Spinner下拉式功能表選擇

Spinner是安卓SDK中的一個下拉式功能表組件,它可以讓使用者從下拉框中選擇不同值。

@Testpublic void testSpinner() throws InterruptedException {WebElement spinner=driver.findElement(By.id("android:id/text1"));//點擊下拉框spinner.click();//滑動尋找直到摘到indiadriver.scrollToExact("India");WebElement optionIndia=driver.findElement(By.name("India"));//點擊一下IndiaoptionIndia.click();//暫停4秒觀察顯示Thread.sleep(4000);}

 

8.SeekBar拖動條操作

實現代碼:

@Testpublic void testSeekbar() throws InterruptedException {//找到拖動條WebElement slider=driver.findElementById("com.android.androidui:id/seekBar1");//擷取拖動條的開始拖動點的x座標int xAxisStartPoint = slider.getLocation().getX();//擷取拖動條的結束點的x座標  = 開始x座標+滑動條元素的寬度int xAxisEndPoint = xAxisStartPoint + slider.getSize().getWidth();//捲軸的y座標int yAxis = slider.getLocation().getY();TouchAction act=new TouchAction(driver);act.press(xAxisStartPoint,yAxis).waitAction(800).moveTo(xAxisEndPoint-1,yAxis).release().perform();}@AfterClasspublic void afterClass() {driver.closeApp();}
 

七 Appium常用方法介紹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.