八 Appium常用方法介紹


由於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處理

@Test

public 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滾動操作

實現代碼:

@Test

public void scroll() throws InterruptedException {

//滑動直到查找到E

driver.scrollToExact("E");

}

 

5.2滑動操作

@Test

public 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中的一個下拉菜單組件,它可以讓用戶從下拉框中選擇不同值。

@Test

public void testSpinner() throws InterruptedException {

WebElement spinner=driver.findElement(By.id("android:id/text1"));

//點擊下拉框

spinner.click();

//滑動查找直到摘到india

driver.scrollToExact("India");

WebElement optionIndia=driver.findElement(By.name("India"));

//點擊一下India

optionIndia.click();

//暫停4秒觀察顯示

Thread.sleep(4000);

}

 

8.SeekBar拖動條操作

實現代碼:

@Test

public 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();

}

@AfterClass

public void afterClass() {

driver.closeApp();

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM