appium+java自动化-实际例子

(简单记录,有不正确的地方请指出) 现在我们根据已搭建好的环境进行编写一个实际例子,需要用usb线连接手机,并且手机必须开启开发者模式,允许调试

数据准备

测试app:ContactManager.apk(百度一般都有)

所需的jar包:java-client-4.1.2.jar、selenium-server-standalone-3.4.0.jar、selenium-java-3.4.0.jar、selenium-server-3.4.0.jar

12966103-d72272b0b0f34857.png
两个也是可以


创建好之后的结构图


12966103-71a4511b49384db3.png
结构图

一、appium启动


12966103-8ab3ed64a07cbc39.png
启动成功


二、整个代码以及注释

public class ContactsTest {

    //private AppiumDriver driver;

    private AndroidDriver driver;

    public void setUp() {

    try {

    File classpathRoot = new File(System.getProperty("user.dir"));

            //创建路径为classpathRoot+/apps的file对象

            File appDir = new File(classpathRoot, "/apps");

            //创建路径为appDir路径+文件的的file对象

            File app = new File(appDir, "ContactManager.apk");

            //创建DesiredCapabilities对象,存放相关信息

            DesiredCapabilities capabilities = new DesiredCapabilities();

            //添加设备名参数和参数值BEK7WKGEJ77DJFMN  pp36811707001925

            capabilities.setCapability("deviceName","8fcccad");

            //指定安卓版本

            capabilities.setCapability("platformVersion", "6.0");

            //添加app参数名和file对象全路径

            capabilities.setCapability("app", app.getAbsolutePath());

            capabilities.setCapability("appPackage", "com.example.android.contactmanager");

            capabilities.setCapability("appActivity", ".ContactManager");

            //创建AndroidDriver对象,具体连向地址为http://127.0.0.1:4723/wd/hub

            driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

            System.out.println("App is launched!");


            WebElement el = driver.findElement(By.className("android.widget.Button"));

            el.click();

            List<WebElement> textFieldsList = driver.findElementsByClassName("android.widget.EditText");

            textFieldsList.get(0).sendKeys("Some Name");

            textFieldsList.get(2).sendKeys("Some@example.com");

            //driver.swipe(100, 500, 100, 100, 2);

            driver.findElementByName("Save").click();

            System.out.println("App is done!");

            driver.quit();

    }catch(Exception e) {

    driver.quit();

    }


    }


    public static void main(String []args) {

    ContactsTest ct=new ContactsTest();

    ct.setUp();

    }

}

另外把截图放出


12966103-5b8ffbd6e7bde531.png
setUp方法截图

三、代码内容解释

在创建连接的时候,可以用不同的代码实现,我这里是从文件中读取apk文件,也可以用直接启动app的方法,可以自己摸索

大部分代码基本都是一样,不用单独说明,只需要注意下面代码

1.设备编号

capabilities.setCapability("deviceName","8fcccad");

通过cmd,输入adb devices进行查看,替换setCapability方法内的第二个参数即可

2.apk文件的appPackage、appActivity参数

capabilities.setCapability("appPackage", "com.example.android.contactmanager");

capabilities.setCapability("appActivity", ".ContactManager");

这两个参数也可以通过adb命令查看,具体的百度一下。如果用ContactManager.apk使用上面的两个参数值没有问题,如果要用其他apk则需要替换

3.获取按钮

WebElement el = driver.findElement(By.className("android.widget.Button"));

el.click();

WebElement :表示类对象

el :表示创建的对象名

driver:开始创建的AndroidDriver对象(这里也可以使用AppiumDriver,详细区别百度)

By.className:表示根据控件的class名称来获取(可以通过class、name等)

“android.widget.Button”:表示控件的属性值

el.click():表示执行点击事件

4.集合,获取多个控件

List<WebElement> textFieldsList = driver.findElementsByClassName("android.widget.EditText");

表示创建一个类型为WebElement的集合,也是根据控件的class名称来获取

5.使用集合内的元素

textFieldsList.get(0).sendKeys("Some Name");

从对象取出元素然后使用各种事件(文本框就输入、按钮就点击事件)

sendKeys("Some Name"):方法表示给对象设置值,值的内容就是方法内传入的参数值

6.使用main方法调用


12966103-a86ee7fcb881c05f.png
main方法

创建类对象,通过类对象调用自定义的方法


注意

1.在有些页面进入的时候,有加载时间,如果过早获取控件对象就会找不到控件,从而报空指针异常,需要设置睡眠时间等待页面加载完成(按钮反应时间类似)

2.


五、错误整理

1.info: [debug] Error: Could not extract PIDs from ps output. PIDS: [], Procs: ["bad pid 'uiautomator'"]


12966103-c83d1e41d34868fd.png
报错日志截图

解决方法

找到Appium\node_modules\appium\node_modules\appium-adb\lib\adb.js文件,并修改如下:

找到这行var outlines = stdout.split("\n");

在其下面添加outlines.shift() 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值