编程语言
首页 > 编程语言> > java+appium使用ObjectMapper/HashMap读取yaml文件,配置desiredCapabilities

java+appium使用ObjectMapper/HashMap读取yaml文件,配置desiredCapabilities

作者:互联网

近期学习java+appium配置启动app的desiredCapabilities时,采用的HashMap读取yaml文件,进行初始化desiredCapabilities

1.原先driver中desiredCapabilities配置代码

public class Driver {
    private static AndroidDriver driver;
    public static void start() throws MalformedURLException {
        final DesiredCapabilities desiredCapabilities = new DesiredCapabilities();

       desiredCapabilities.setCapability("platformName","android");
      desiredCapabilities.setCapability("devicesName","6EB0217722001760");
       desiredCapabilities.setCapability("appPackage","com.xueqiu.android");
      desiredCapabilities.setCapability("appActivity",".view.WelcomeActivityAlias");
       desiredCapabilities.setCapability("autoGrantPermissions",true);
       desiredCapabilities.setCapability("noReset",true);
        URL remoteUrl = new URL(http://127.0.0.1:4723/wd/hub);
        driver = new AndroidDriver(remoteUrl, desiredCapabilities);
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
    }
    public static AppiumDriver<WebElement> getCurrentDriver(){

        return driver;
    }
}

2.新方案

2.1 建立XueqiuConfig文件用于读取yaml文件中初始化启动app的配置desiredCapabilities

public class XueqiuConfig {
//    public修饰变量,让其他类也可被访问
    public String username="18814811148";
    public String password="123456";
    public String app="https://xxxxxx/xueqiu.apk";
    public String appium="";
    public int wait=6;
    public HashMap<String, Object> capabilities=new HashMap<String, Object>();
    //创建HashMap对象,将HashMap引用赋值给变量capabilities, Object是所有类型的父类,capabilities为数组形式{},里面每个元素是键值对形式存在
    static XueqiuConfig load(String path){
        ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); 
        //ObjectMapper类是Jackson库的主要类。它称为ObjectMapper的原因是因为它将JSON映射到Java对象(反序列化),或将Java对象映射到JSON(序列化)
        //new YAMLFactory()用于切换yaml状态,后面用readvalue读取yaml文件
        try {
            XueqiuConfig config = mapper.readValue(XueqiuConfig.class.getResource(path), XueqiuConfig.class);
            return config;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

关于HashMap讲解
https://www.cnblogs.com/wyhhh/p/11286178.html
源码讲解
https://wiki.jikexueyuan.com/project/java-collection/hashmap.html

关于ObjectMapper(new YAMLFactory())讲解
https://www.cnblogs.com/hogwarts/p/12981255.html
https://blog.csdn.net/lpfasd123/article/details/89346313

2.2 driver更改

public class Driver {
    private static AndroidDriver driver;
    public static void start() throws MalformedURLException {
        final DesiredCapabilities desiredCapabilities = new DesiredCapabilities();

        final XueqiuConfig config = XueqiuConfig.load("/xueqiu.yaml");
//       config.capabilities, capabilities为HashMap引用赋值的变量,keySet返回Set此映射中包含的键的视图
//        forEach进行遍历,java遍历map方式
        config.capabilities.keySet().forEach(key->{
            Object value=config.capabilities.get(key); // capabilities.get(key),HashMap对象通过key获取value值
            desiredCapabilities.setCapability(key, value);
        });

        URL remoteUrl = new URL(config.appium);
        driver = new AndroidDriver(remoteUrl, desiredCapabilities);
        driver.manage().timeouts().implicitlyWait(config.wait, TimeUnit.SECONDS);
//        WebDriverWait wait =new WebDriverWait(driver, 10);
//        wait.until(ExpectedConditions.presenceOfElementLocated(By.id("元素")));

    }
    public static AppiumDriver<WebElement> getCurrentDriver(){

        return driver;
    }
}

foreach讲解
https://www.cnblogs.com/bingyimeiling/p/10741761.html

2.3yaml文件

---
username: xxx
password: dddd
app: 1.apk
appium: http://127.0.0.1:4723/wd/hub
wait: 15
capabilities:
  platformName: android
  devicesName: 6EB0217722001760
  appPackage: com.xueqiu.android
  appActivity: .view.WelcomeActivityAlias
  autoGrantPermissions: true

2.4 class XueqiuConfigTest

class XueqiuConfigTest {

    @Test
    void load() {
        XueqiuConfig config=XueqiuConfig.load("/xueqiu.yaml");
        assertThat(config, not(equalTo(null)));
        System.out.println(config);
        System.out.println(config.username);
        System.out.println("打印appium值");
        System.out.println(config.appium);
        System.out.println("打印capabilities");
        System.out.println(config.capabilities);
//        System.out.println(config.capabilities.get("aaa"));


    }
}

标签:appium,java,driver,capabilities,yaml,desiredCapabilities,new,config,public
来源: https://blog.csdn.net/weixin_43443344/article/details/114485948