移动自动化测试_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 

https://github.com/appium/sample-code/blob/master/sample-code/examples/java/junit/src/test/java/com/saucelabs/appium/AndroidContactsTest.java

猜你喜欢

转载自afra-liu.iteye.com/blog/2362128