ubuntu+ Appium+eclipse+java +android真机, Run As +JUnit Test报错An internal error occurred during: "LaunchingAppDemo".java.lang.NullPointerException,因此选用ubuntu+appium+eclipse+testng+android真机环境。
step1 eclipse中通过help---installnew software的方式在线安装tastng插件速度较慢,建议采用eclipse-testng离线
eclipse-testng离线安装包 1.下载testNG 离线安装包【eclipse-testng离线包】,并解压。 下载地址:http://dl.bintray.com/testng-team/testng-eclipse-release/zipped/ 2.将解压后的文件\eclipse-testng\features\org.testng.eclipse_xxxxxxxx放到eclipse安装路径下的features目录下 3.将解压后的文件\eclipse-testng\plugins\org.testng.eclipse_xxxxxxx放到eclipse安装路径下的plugins目录下 4.重启eclipse 5.验证是否安装成功,file-->new-->other-->TestNg step 2 ,建立testng项目,运行测试实例 测试案例:智联招聘:输入用户名+密码,并登录。 1、得到当前链接android设备的名称: $ adb devices EQEM9HQWVS5T5SCQ device 2、得到智联招聘app的包名和登录页面名称 ~$adb shell dumpsys activity | grep "mFocusedActivity" mFocusedActivity: ActivityRecord{4ee6d56 u0 com.zhaopin.social/.ui.UserLoginActivity t315} 3、得到登录界面控件的id ~$ uiautomatorviewer com.zhaopin.social:id/login_aotoTV com.zhaopin.social:id/password_TV com.zhaopin.social:id/login_view_BTN 4、创建testng项目 新建java项目 添加TestNG lib 添加appium libs:共有3个lib (1)导入Selenium类库 下载地址: http://selenium-release.storage.googleapis.com/2.44/selenium-java-2.44.0.zip http://selenium-release.storage.googleapis.com/2.44/selenium-server-standalone-2.44.0.jar 注:需要导入两个,一个是客户端,一个是服务端,服务端库不导入会导致运行时报错。 (2)导入Appium类库 下载地址 下载地址:https://search.maven.org/remotecontent?filepath=io/appium/java-client/1.2.1/java-client-1.2.1.jar 在该项目下新建TestNG class(AppiumTest.java)和testng.xml:File-->new-->other-->TestNG-->TestNG class 1)、AppiumTest.java package com.appium.test; import io.appium.java_client.AppiumDriver; //import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.remote.CapabilityType; import org.openqa.selenium.remote.DesiredCapabilities; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; public class AppiumTest { private AppiumDriver driver; DesiredCapabilities capabilities = new DesiredCapabilities(); @Test public void f() { driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); WebElement accountEle = driver.findElement(By .id("com.zhaopin.social:id/login_aotoTV")); accountEle.sendKeys("13682661384"); WebElement passwordEle = driver.findElement(By .id("com.zhaopin.social:id/password_TV")); passwordEle.sendKeys("122021862yanyun"); driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); WebElement loginButton = driver.findElement(By .id("com.zhaopin.social:id/login_view_BTN")); loginButton.click(); driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); System.out.println("test1............."); } @BeforeMethod public void beforeMethod() { try { /* * File classpathRoot = new File(System.getProperty("user.dir")); * File appDir = new File(classpathRoot, "apps"); File app = new * File(appDir, "checker_2.3.8.apk"); * capabilities.setCapability("app", app.getAbsolutePath()); */ capabilities.setCapability(CapabilityType.BROWSER_NAME, ""); capabilities.setCapability("platformName", "Android"); capabilities.setCapability("deviceName", "EQEM9HQWVS5T5SCQ"); capabilities.setCapability("platformVersion", "7.1.1"); capabilities.setCapability("appPackage", "com.zhaopin.social"); capabilities.setCapability("appActivity", ".ui.UserLoginActivity"); capabilities.setCapability("unicodeKeyboard", "True"); capabilities.setCapability("resetKeyboard", "True"); capabilities.setCapability("noSign", "True"); driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); } catch (MalformedURLException e) { e.printStackTrace(); } System.out.println("set up..............."); } @org.testng.annotations.AfterMethod public void AfterMethod() { driver.close(); } } 2)、testng.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="Appium" parallel="none"> <test name="Test"> <classes> <class name="com.appium.test.AppiumTest"/> </classes> </test> <!-- Test --> </suite> <!-- Suite → 最终的project结构5、ubuntu命令下运行appium-server: appium -a 127.0.0.1 -p 4723 -U EQEM9HQWVS5T5SCQ --no-reset 6、在testng.xml文件上右键Run As--->TestNg Suite. 7、appium-server运行结束 appium -a 127.0.0.1 -p 4723 -U EQEM9HQWVS5T5SCQ --no-reset ----》************************************** [debug] [MJSONWP] Calling AppiumDriver.implicitWait() with args: [20000,"77d10cad-8158-4434-bba7-43e10b6ac539"] [debug] [BaseDriver] Set implicit wait to 20000ms [debug] [MJSONWP] Responding to client with driver.implicitWait() result: null [HTTP] <-- POST /wd/hub/session/77d10cad-8158-4434-bba7-43e10b6ac539/timeouts/implicit_wait 200 2 ms - 76 [HTTP] --> DELETE /wd/hub/session/77d10cad-8158-4434-bba7-43e10b6ac539/window {} [debug] [MJSONWP] Calling AppiumDriver.closeWindow() with args: ["77d10cad-8158-4434-bba7-43e10b6ac539"] [HTTP] <-- DELETE /wd/hub/session/77d10cad-8158-4434-bba7-43e10b6ac539/window 501 1 ms - 122 出现“DELETE /wd/hub/session/77d10cad-8158-4434-bba7-43e10b6ac539/window 501 1 ms - 122”表明自动化测试结束。 8.testng的测试报告: 1)总体报告结果:/AppiumTest/test-output/index.html,包含测试case数目,时间,测试类及其方法
2)详细报告:AppiumTest/test-output/Default suite/Default test.html,红色边表示异常,绿色表示测试pass。 9、常见问题:
在使用安卓定位页面元素时,启动uiautomatorviewer ,但是报错: Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncExceptio
解决办法:关闭appium
PS:本文档仅作学习,如有侵权,请留言 参考文档: 1、http://blog.youkuaiyun.com/jiabailong/article/details/52293729 2、http://www.360doc.com/content/16/0408/14/8189294_548863421.shtml