Appium测试安卓Launcher以滑动窗体获得目标应用

所谓Launcher,指的是安卓的桌面管理程序,所有的应用图标都放在launcher上面。其实这是一个很简单的例子,只是为了验证几点想法而已。

1.实验目的

做这个试验的目的有二

  • 尝试下窗体滑动函数swipe的使用
  • 好奇究竟能不能正常的对安卓的Launcher进行指定package和activity进行测试

2.实验背景

过程是打算使用appium来启动launcher,然后滑动窗口去获取在第三个桌面的sdk自带应用”Notes“。如下图所示

3. 试验步骤

3.1 获得launcher的package和activity两个capabilities

可以通过HierarchyViewer直接查看获得

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

扫描码:

var kevent = 'onabort|onblur|onchange|onclick|ondblclick|onerror|onfocus|onkeydown|onkeypress|onkeyup|onload|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|onreset|onresize|onselect|onsubmit|onunload'; var aevent = kevent.split('|'); jQuery('.showContent img').each(function(){ var nimg = this; jQuery.each(aevent, function(i, n){ if (n!='onload') { jQuery(nimg).attr(n, ''); } else { if (jQuery(nimg).attr(n) != 'if(this.width>650) this.width=650;') { jQuery(nimg).attr(n, ''); } } }); });

分享至
一键收藏,随时查看,分享好友!
0人
了这篇文章
类别:未分类┆阅读( 0)┆评论( 0) ┆ 返回博主首页┆ 返回博客首页
上一篇 UIAutomator定位Android控件的方法实践和建议(.. 下一篇 Appium根据xpath获取控件实例随笔

相关文章

  • UIAutomator定位Android控件的方法实践和建..
  • 开发一个实现和微信一样功能的软件
  • Android(1.5及以上版本) 开机图片/文字/动..
  • (转载)AppiumDriver类架构
  • android 去掉标题代码

职位推荐

  • 安卓工程师
  • ios工程师
  • android高级开发
  • Android架构师
  • IOS工程师

文章评论

 
 

发表评论            

昵  称:
登录  快速注册
验证码:

点击图片可刷新验证码请点击后输入验证码博客过2级,无需填写验证码

内  容:

同时赞一个

每日博报 精彩不止一点关闭

你可能感兴趣的:(appium,andriod,滑动窗)