移动自动化测试_Appium_003_连华为P9真机测试
我的手机是华为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