標籤:核心 複選框 擷取 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常用方法介紹