Appium+AS+Java(一)测试AndroidContactsTest.java样例

别来无恙 提交于 2019-12-23 10:49:30

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

环境搭建参照:https://blog.csdn.net/niubitianping/article/details/52523239
遇到的问题:
1、导入的包不对
2、源代码有些地方用不了,调整了一点
3、appium在androidV7.0系统上运行时报错, Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install io.appium.settings without first uninstalling.],appium窗口提示error定位到adb.js文件中
4、注释报错:编码GBK的不可映射字符
5、真机测试时,会弹出键盘,在setup()中设置屏蔽键盘
6、卸载软件报错
7、Swipe函数中duration设置过小,AS中报错,定位到Swipe函数

解决:

1、导入的包注意版本号
java-client-4.1.2.jar
selenium-server-standalone-3.0.0-beta3.jar

2、代码调整了一点,直接上代码

package com.example.demotest;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;

import java.util.List;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;

public class AndroidContactsTest {
    //Driver
    private AppiumDriver<AndroidElement> driver;
    /**
     * 配置启动driver
     *
     * @throws Exception
     */
    @Before
    public void setUp() throws Exception {
        //java.io.File classpathRoot = new java.io.File("user.dir");
        //app的目录
        java.io.File appDir = new java.io.File("src/main/java/apps/");
        //app的名字,对应你apps目录下的文件
        java.io.File app = new java.io.File(appDir, "ContactManager.apk");
        //创建Capabilities
        DesiredCapabilities capabilities = new DesiredCapabilities();
        // capabilities.setCapability("noReset", true);
        //模拟器的名字
        capabilities.setCapability("deviceName", "4e04d4a9");
        //安卓系统版本
        capabilities.setCapability("platformVersion", "7.1.1");
        //设置app的路径
        capabilities.setCapability("app", app.getAbsolutePath());
        //设置app的包名
        capabilities.setCapability("appPackage", "com.example.android.contactmanager");
        //使用unicode编码方式发布字符串
        capabilities.setCapability("unicodeKeyboard", "true");
        //屏蔽软键盘
        capabilities.setCapability("resetKeyboard", "true");
        //设置app的启动activity
        capabilities.setCapability("appActivity", ".ContactManager");
        //启动driver
        java.net.URL url = new java.net.URL("http://127.0.0.1:4723/wd/hub");
        driver = new AndroidDriver<>(url, capabilities);
    }    
    @Test
    public void addContact() {
        //利用Xpath的方法寻找text值为Add Contact的控件
        WebElement el = driver.findElement(By.xpath(".//*[@text='Add Contact']"));
        //点击控件
        el.click();
        //利用类名获取界面上所有的EditText
        List<AndroidElement> textFieldsList = driver.findElementsByClassName("android.widget.EditText");
        //第一个EditText输入内容Some Name
        textFieldsList.get(0).sendKeys("Some Name");
        //第三个EditText输入内容Some@example.com
        textFieldsList.get(2).sendKeys("Some@example.com");
        //滑动位置,持续500ms
        driver.swipe(100, 297, 100, 267, 500);
        //找到save,点击
        driver.findElementByXPath(".//*[@text='Save']").click();
    }    
    @After
    public void tearDown() throws Exception {
        //测试完毕,关闭driver,不关闭将会导致会话还存在,下次启动就会报错
        driver.quit();
    }
}

3、在adb.js文件中修改
问题详细描述:https://www.cnblogs.com/pengfy/p/10653104.html

预置条件:手机端已经安装完Appium Settings 和 Unlock两个应用
解决步骤:
1.修改源码文件-注释安装appiumSettings和unlock的两行代码
   文件路径: X:\Program Files (x86)\Appium\node_modules\appium\lib\devices\android\android.js

2.修改源码文件如下:
 路径: \Program Files (x86)\Appium\node_modules\appium\node_modules\appium-adb\lib\adb.js
             在adb.js的1035行找到

   this.shell("ps '" + name + "'", function (err, stdout) {
   if (err) return cb(err);
    替换成
   this.shell_grep("ps", name, function (err, stdout) {
   if (err) {
     logger.debug("No matching processes found");
     return cb(null, []);
    }
     
并增加上面用到的shell_grep函数,**不是替换**,**是增加**:
    ADB.prototype.shell_grep = function (cmd, grep, cb) {
        if (cmd.indexOf('"') === -1) {
        cmd = '"' + cmd + '"';
        }   
        var execCmd = 'shell ' + cmd + '| grep ' + grep;
       this.exec(execCmd, cb);
       };
   
 4.注释报错:编码GBK的不可映射字符
原因:代码中的中文注释会编译报错
解决方案:
在项目build.gradle下添加下面代码
tasks.withType(JavaCompile) {  
    options.encoding = "UTF-8"  

5、真机测试时,会弹出键盘,在setup()中设置屏蔽键盘
//使用unicode编码方式发布字符串
  capabilities.setCapability("unicodeKeyboard", "true");
//屏蔽软键盘
  capabilities.setCapability("resetKeyboard", "true");
  
6、卸载软件报错
Error: Command failed: C:\Windows\system32\cmd.exe /s /c "F:\Android\android_SDK\platform-tools\adb.exe -s 4e04d4a9 install 
 "F:\Appium\Appium\node_modules\appium\build\settings_apk\settings_apk-debug.apk""> adb: failed to install F:\Appium\Appium\node_modules\appium\build\settings_apk\settings_apk-debug.apk: 
Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install io.appium.settings without first uninstalling.]
解决办法:
adb uninstall io.appium.settings
adb uninstall io.appium.unlock
adb uninstall io.appium.android.ime

7、Swipe函数中duration设置过小,AS中报错
duration单位是ms,时间数值太小的话不行,加大持续时间,设置300以上
 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!