我的手机是华为P9的,手头也没有其他测试的机子。就只能拿自己的当小白鼠了~~
1. 开启手机的USB模式。USB模式其实就是android的一个开发者模式,
是哪一款手机,直接百度查下相应的USB模式怎么开,大把的回答的。华为的步骤是:
进入手机主界面->设置->关于手机->版本号
连续快速的点击版本号多次,网上是说7次左右。
返回上一个界面,就会多出一个开发者选项的条目。
进入开发者选项界面,选中USB调试即可。
可参考: https://jingyan.baidu.com/article/fd8044faefa2b45031137aaa.html
2. 将手机与电脑用数据线连接。再次确认USB模式是否开启成功。
命令行: adb devices -l 检查手机是否与电脑连接成功。 连接电脑时提示要安装华为手机助手,还有应用商店版本需要更新。反正它提示啥你就装啥吧。在这一步我也卡壳了好久,USB模式开启了过会儿检查又关闭,也不知道是什么原因。如果设置了手机密码啥的也暂时关掉吧。好像是勾选了USB模式之后,选择了一个默认调试的应用就可以了。反正下面这个界面出来我也是折腾了老半天。~~~~(>_<)~~~~
3.启动Appium并开启一个Appium Server。
这里用的device就是上面查找到的内容。在启动Appium之前指定device的参数。
启动成功:
4. test case代码:
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.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import io.appium.java_client.android.AndroidDriver; import io.appium.java_client.android.AndroidElement; import java.io.File; import java.net.URL; import java.util.List; public class AppDemo { private AndroidDriver driver; @BeforeMethod(alwaysRun=true) 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"); // System.out.println(app.isFile() + "==" + app.exists()); // DesiredCapabilities capabilities = new DesiredCapabilities(); // capabilities.setCapability(CapabilityType.BROWSER_NAME, ""); // capabilities.setCapability("platformName", "Android"); // capabilities.setCapability("deviceName","KWG5T16621002512"); // capabilities.setCapability("platformVersion", "7.0"); // capabilities.setCapability("app", app.getAbsolutePath()); // capabilities.setCapability("appPackage", "com.example.android.notepad"); // capabilities.setCapability("appActivity", "com.example.android.notepad.NotesList"); // driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); File classpathRoot = new File(System.getProperty("user.dir")); File appDir = new File(classpathRoot, "apps"); File app = new File(appDir, "ContactManager.apk"); System.out.println(app.isFile() + "==" + app.exists()); DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("deviceName","KWG5T16621002512"); capabilities.setCapability("platformVersion", "4.4"); capabilities.setCapability("app", app.getAbsolutePath()); capabilities.setCapability("appPackage", "com.example.android.contactmanager"); capabilities.setCapability("appActivity", ".ContactManager"); driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); } @AfterMethod(alwaysRun=true) public void tearDown() throws Exception { driver.quit(); } @Test(groups={"noteTest"}) public void noteTest1() { WebElement el = driver.findElement(By.xpath(".//*[@text='Add Contact']")); el.click(); List<AndroidElement> textFieldsList = driver.findElementsByClassName("android.widget.EditText"); textFieldsList.get(0).sendKeys("Some Name"); textFieldsList.get(2).sendKeys("[email protected]"); driver.swipe(100, 500, 100, 100, 2); driver.findElementByXPath(".//*[@text='Save']").click(); } }
5. 执行TestNG的测试用例。又碰到了网上很多人都碰到过的一个错误,真是好事多磨啊。做我们这一行可真是一件默认耐心的事情啊。O(∩_∩)O哈哈~
错误: info: [debug] Responding to client with error: {"status":33,"value":{"message":"A new session could not be created. (Original error: Could not extract PIDs from ps output. PIDS: [], Procs: [\"bad pid 'uiautomator'\"])","origValue":"Could not extract PIDs from ps output. PIDS: [], Procs: [\"bad pid 'uiautomator'\"]"},"sessionId":null}
按照网上搜到的解决方案,修改所谓的adb.js文件。解决了该问题。
文件路径:E:\software\Appium\node_modules\appium\node_modules\appium-adb\lib\adb.js
注明:此时我升级了selenium 的包到2.53.0,java-client包到4.1.2
selenium-server-standalone-2.53.0.jar
java-client-4.1.2.jar
相关jar包和安装包的分享路径:链接:https://pan.baidu.com/s/1c10nXM4 密码:ud21
网上测试的APK和测试代码可以在github上下载。有时间可以看看。
https://github.com/appium/sample-code/blob/master/sample-code/apps/ContactManager/ContactManager.apk