中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Appium測試安卓Launcher以滑動窗體獲得目標應用

發布時間:2020-08-30 15:35:24 來源:網絡 閱讀:293 作者:zhukev 欄目:移動開發

所謂Launcher,指的是安卓的桌面管理程序,所有的應用圖標都放在launcher上面。其實這是一個很簡單的例子,只是為了驗證幾點想法而已。

1.實驗目的

做這個試驗的目的有二

  • 嘗試下窗體滑動函數swipe的使用
  • 好奇究竟能不能正常的對安卓的Launcher進行指定package和activity進行測試

2.實驗背景

過程是打算使用appium來啟動launcher,然后滑動窗口去獲取在第三個桌面的sdk自帶應用”Notes“。如下圖所示
Appium測試安卓Launcher以滑動窗體獲得目標應用

3. 試驗步驟

3.1 獲得launcher的package和activity兩個capabilities

可以通過HierarchyViewer直接查看獲得
Appium測試安卓Launcher以滑動窗體獲得目標應用

3.2 編碼實現

package majcit.com.AppiumDemo;  import io.appium.java_client.android.AndroidDriver;  import java.net.URL; import org.junit.Test; import org.junit.After; import org.junit.Before; import org.openqa.selenium.Dimension; import org.openqa.selenium.NoSuchElementException; import org.openqa.selenium.Point; import org.openqa.selenium.WebElement; import org.openqa.selenium.remote.DesiredCapabilities;  import static org.hamcrest.Matchers.*; import static org.hamcrest.MatcherAssert.assertThat;  /**  * Unit test for simple App.  */ public class LauncherTest {     /**      * Create the test case      *      * @param testName name of the test case      */ 	private AndroidDriver driver;      @Before     public void setUp() throws Exception {         // set up appium         //File classpathRoot = new File(System.getProperty("user.dir"));         //File appDir = new File(classpathRoot, "apps");         //File app = new File(appDir, "NotePad.apk");         DesiredCapabilities capabilities = new DesiredCapabilities();         capabilities.setCapability("deviceName","Android");         //capabilities.setCapability("platformVersion", "4.2");         //capabilities.setCapability("platformName", "Android");         //capabilities.setCapability("app", app.getAbsolutePath());         capabilities.setCapability("appPackage", "com.miui.home");         capabilities.setCapability("appActivity", "com.miui.home.launcher.Launcher");         //capabilities.setCapability("appActivity", ".NotesList");         //capabilities.setCapability("autoLaunch", "false");         //capabilities.setCapability("noReset", true);         driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);     }       @After     public void tearDown() throws Exception {         driver.quit();     }          @Test     public void launchNotePad() throws InterruptedException{     	     	WebElement el = null;     	WebElement screen = null;     	Point point = null;     	Dimension size = null;     	     	boolean found = false;     	int pageCount = 3; //Assume that there are totally 3 screens to be swiped.     	     	int xStart = -1;     	int yStart = -1;     	int xEnd = -1;     	int yEnd = -1;     	     	//Get the start and end coordinates for swipe     	Thread.sleep(3000);     	screen = driver.findElementById("com.miui.home:id/cell_layout");     	point = screen.getLocation();     	size = screen.getSize();     	xEnd = point.getX();     	yEnd = point.getY() + size.getHeight()/2;     	xStart = point.getX() + size.getWidth() - 5;     	yStart = yEnd;     	     	System.out.println("starX:" + xStart +"\nstartY:" + yStart + "\nendX:" + xEnd + "\nendY:" + yEnd);     	     	//本來想通過判斷屏幕上的幾個小圓點來判斷究竟有多少個屏幕的,但發覺xPath根本不起效,父目錄感覺根本起不了定位作用,只有最后的//android.widget.ImageView起效,所以一下找出75個元素。     	/*     	List<WebElement> pageImages = driver.findElementsByXPath("//android.view.View/android.widget.LinearLayout/android.widget.ImageView");     	assertThat(pageImages.size(),is(3));     	for (WebElement e: pageImages) {     		e.click();     	}     	*/     	     	//Swipe all screens till get the expected control     	int currentPage = 0; 	     	while (found == false && currentPage < pageCount) {     		found = true;     		     		currentPage += 1;     		     		try {         		el = driver.findElementByName("Notes");         	}catch (NoSuchElementException e) {         		found = false;         		System.out.println(e);         	}     		     		if (found == true)     			break;     		     		driver.swipe(xStart, yStart, xEnd, yEnd, 100);         	Thread.sleep(1000);     	}     	     	assertThat(found,is(true));     	assertThat(el,notNullValue());     	         el.click();                                }      } 
步驟說明大概如下:
  • 準備好必須的capabilities傳送給appium服務器端,注意指定app,因為我們不需要重新安裝Launcher
  • 找到代表整個屏幕的控件,然后通過獲取它的location和size屬性來計算出滑動開始和結束的坐標。注意開始的坐標如果是屏幕的邊界,需要調整下像素(例子中是減去5個像素)以防出錯。
  • 通過滑動遍歷每個頁面直到找到目標控件為止。

 

作者

自主博客

微信

CSDN

天地會珠海分舵

http://techgogogo.com


服務號:TechGoGoGo

掃描碼:

Appium測試安卓Launcher以滑動窗體獲得目標應用

向AI問一下細節

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

AI

河北省| 正蓝旗| 竹山县| 丰镇市| 水城县| 彰化市| 弥勒县| 永州市| 郓城县| 樟树市| 蒙山县| 甘泉县| 厦门市| 张家港市| 四子王旗| 潍坊市| 建平县| 滨州市| 河北省| 克山县| 万宁市| 南汇区| 营口市| 海阳市| 安福县| 海林市| 泰顺县| 赤壁市| 汕尾市| 兴仁县| 株洲县| 徐水县| 池州市| 江西省| 通榆县| 孟津县| 溆浦县| 项城市| 铁岭县| 澎湖县| 昌乐县|