使用Appium测试hybrid程序
来源:互联网 发布:南大紫荆网mac版 编辑:程序博客网 时间:2024/04/28 01:04
上一节我们简单介绍了使用Appium来测试native程序,而对于hybrid程序,因为里面的按钮、输入框等都位于webviewer控件中,所以我们的测试脚本会有些不一样。
根据官方文档显示,Appium使用以下的第三方框架:
Android 4.4+: Google’s UiAutomator
Android 2.3+: Google’s Instrumentation. (Instrumentation由单独的项目Selendroid提供支持 )
在4.4以上(包含4.4)可以使用UiAutomator,此时注意开启webview的一个选项:
webView.setWebContentsDebuggingEnabled(true);
这里我统一使用selendroid,使用selendroid有以下几个注意事项:
1.DesiredCapabilities需要设置“automationName”为“Selendroid”
capabilities.setCapability("automationName","Selendroid");
Selendroid在控件查找方面可以使用cssSelector,UiAutomator就不行,如果使用UiAutomator就只能通过控件类型以及上面的文本来进行查找了,另外在最开始查找控件之前,先Sleep一段时间,否则因为画面没有渲染完,导致找不到控件如:
Thread.sleep(2000);driver.findElementsByClassName("android.widget.Button").get(0).click();driver.findElementByXPath("//android.view.View[contains(@content-desc,'确定')]").click();
2.DesiredCapabilities需要设置“app”,否则会提示权限不足 。
File classpathRoot = new File(System.getProperty("user.dir"));File appDir = new File(classpathRoot, "apps");File app = new File(appDir, "Appium_TestApp.apk");capabilities.setCapability("app", app.getAbsolutePath());
3.输入字符不支持unicode,对于中文字符使用下面的方法进行输入:
JavascriptExecutor jse = (JavascriptExecutor) driver;jse.executeScript("document.getElementById('title').value='软件工程'");
完整测试脚本如下:
package com.digiwin.mobile.appium;import static org.junit.Assert.assertEquals;import java.io.File;import java.net.URL;import java.util.Set;import org.junit.After;import org.junit.Before;import org.junit.Test;import org.openqa.selenium.By;import org.openqa.selenium.OutputType;import org.openqa.selenium.TakesScreenshot;import org.openqa.selenium.remote.CapabilityType;import org.openqa.selenium.remote.DesiredCapabilities;import io.appium.java_client.android.AndroidDriver;public class hybrid_seledroid { private AndroidDriver<?> driver; @SuppressWarnings("rawtypes") @Before public void setUp() throws Exception { DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability(CapabilityType.BROWSER_NAME, ""); capabilities.setCapability("deviceName", "Android Emulator"); capabilities.setCapability("automationName","Selendroid"); capabilities.setCapability("platformName", "Android"); File classpathRoot = new File(System.getProperty("user.dir")); File appDir = new File(classpathRoot, "apps"); File app = new File(appDir, "Appium_TestApp.apk"); capabilities.setCapability("app", app.getAbsolutePath()); capabilities.setCapability("appPackage", "com.example.appium_testapp"); capabilities.setCapability("appActivity", ".MainActivity"); driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities); } @Test public void webview() throws InterruptedException { Set<String> contexts = driver.getContextHandles(); for (String contextName : contexts) { System.out.println(contextName); if (contextName.contains("WEBVIEW")){ driver.context(contextName); } } Thread.sleep(2000); //新增测试 int bookNum = driver.findElementsByCssSelector("ion-item").size();//当前书籍数 driver.findElement(By.cssSelector(".ion-ios-plus-outline")).click();//新增 Thread.sleep(1000); driver.findElement(By.cssSelector("#title")).sendKeys("AAA"); driver.findElement(By.cssSelector("#author")).sendKeys("Clark"); driver.findElement(By.cssSelector("#press")).sendKeys("BBBB"); driver.findElement(By.cssSelector("#edition")).sendKeys("CCC"); driver.findElements(By.cssSelector("input")).get(4).sendKeys("ISBN 7-302-1212-6/PQ·3633"); driver.findElement(By.cssSelector(".button-positive")).click();//保存 Thread.sleep(1000); driver.findElement(By.cssSelector("button.ng-binding")).click();//点击确定按钮 Thread.sleep(10000); System.out.println("当钱书籍个数:"+driver.findElementsByCssSelector("ion-item").size()); assertEquals(++bookNum,driver.findElementsByCssSelector("ion-item").size()); //修改测试 driver.findElementsByCssSelector("ion-item").get(0).click(); Thread.sleep(1000); driver.findElement(By.cssSelector("#author")).clear(); driver.findElement(By.cssSelector("#author")).sendKeys("Test"); driver.findElement(By.cssSelector(".button-positive")).click();//保存 Thread.sleep(1000); driver.findElement(By.cssSelector("button.ng-binding")).click();//点击确定按钮 Thread.sleep(1000); driver.findElementsByCssSelector("ion-item").get(0).click(); assertEquals(driver.findElement(By.cssSelector("#author")).getAttribute("value"),"Test"); driver.findElementByCssSelector(".ion-chevron-left").click(); Thread.sleep(1000); // 删除测试 driver.findElement(By.cssSelector(".ion-ios-minus-outline")).click();//点击删除按钮 Thread.sleep(1000); int lastIndex = driver.findElements(By.cssSelector("ion-delete-button")).size()-1; driver.findElements(By.cssSelector("ion-delete-button")).get(lastIndex).click(); Thread.sleep(1000); driver.findElement(By.cssSelector(".ion-ios-minus-outline")).click();//再次点击删除按钮,返回正常状态 assertEquals(--bookNum,driver.findElementsByCssSelector("ion-item").size()); Thread.sleep(10000); } @After public void tearDown() throws Exception { driver.quit(); }}
0 0
- 使用Appium测试hybrid程序
- 使用Appium测试Hybrid App的方法
- 使用Appium测试native程序
- 使用Appium测试IOS程序
- 使用appium测试微博
- Appium Hybrid混合应用测试——Native切换WebView(转)
- Appium 使用 Python 运行 Appium 测试的示例
- appium iOS 自动化测试 使用备忘
- Android自动化测试之appium的使用
- 使用appium进行iOS App测试
- Appium测试
- Appium 中 iOS 下的 Hybrid
- Appium Hybrid混合应用 部分问题解决
- 使用Java程序启动/关闭Appium server
- 使用appium在android7.0真机上测试程序时报错command failed shell "ps 'uiautomator'"的解决方式
- Appium+Python自动化测试(二)--运行App程序示例
- 使用adb connect对appium进行无线自动化测试
- 手机自动化测试(7)--appium代码使用
- Unity教程之-解析OBJ模型并将其加载到Unity3d场景中
- Android Studio 推荐的字体配置
- C/C++已知坐标求角度(函数atan和atan2)
- 心灵鸡汤
- cdoj 约会Ⅱ
- 使用Appium测试hybrid程序
- Unity教程之-Unity光照贴图Lightmapping
- android学习日记(七):ViewPager+Fragment
- easyui combtree树默认展开
- 2016年让开发工作变得更简单的小事
- form表单的编码问题
- numberset
- 顺序栈及应用
- 安卓学习笔记之:实现ImageView图片双击放大及缩小