利用图片实现APP元素定位sikulix

简介:Sikuli 是一种新颖的图形脚本语言,或者说是一种另类的自动化测试技术。它与我们常用的自动化测试技术(工具)有很大的区别。

sikulix  jar包下载地址

SikuliX project files : SikuliX

在阿里云仓库也可以搜索这个jar包

仓库服务

 

需要下载以下3个包,

sikulixapi-2.0.5.jar sikulixapi-2.0.5-win.jar 用于windows

sikulixapi-2.0.5.jar sikulixapi-2.0.5-mac.jar 用于mac电脑

 

也可以在pom文件中添加,但是不建议采用此方法,这个包会有很多的依赖包,可能会下载失败

也可以参考:java+win7+eclipse+Maven+sikuli 配置总结---图形脚本语言 - 走看看

 <dependency>
    <groupId>com.sikulix</groupId>
    <artifactId>sikulixapi</artifactId>
    <version>1.1.0</version>
</dependency>
 

package com.welab.automation.projects.demo;

import io.appium.java_client.MobileBy;
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.service.local.AppiumDriverLocalService;
import io.appium.java_client.service.local.AppiumServiceBuilder;
import lombok.SneakyThrows;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.sikuli.script.Screen;

import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.util.Base64;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicInteger;

import static io.appium.java_client.service.local.flags.GeneralServerFlag.LOG_LEVEL;
import static io.appium.java_client.service.local.flags.GeneralServerFlag.SESSION_OVERRIDE;

public class TestSikulix {


    public static void main(String[] args) throws URISyntaxException, IOException {
        TestSikulix testOpenCV = new TestSikulix();
        testOpenCV.startMain();
    }

    AndroidDriver driver;
    @SneakyThrows
    public void startMain()  throws URISyntaxException, IOException {
        DesiredCapabilities devices  = new DesiredCapabilities();
        devices.setCapability("platformName", "Android");
        devices.setCapability("deviceName","emulator-5554");
        devices.setCapability("platformVersion", "10");
        devices.setCapability("appPackage","com.android.settings");
        devices.setCapability("appActivity","com.android.settings.Settings");
        devices.setCapability("automation","uiautomator2");
        devices.setCapability("unicodeKeyboard", true);
        devices.setCapability("resetKeyboard",true);
        //需要打开appium server,并启动模拟器
        //driver= new AndroidDriver(new URL("http://localhost:4723/wd/hub"),devices);

        //不需要打开appium桌面版
        AppiumDriverLocalService service =startAppiumService();
        driver = new AndroidDriver(service.getUrl(), devices);

        Screen s = new Screen();
        // 设置未找到元素,自动等待时间10秒
        s.setAutoWaitTimeout(10);
        String project_path=System.getProperty("user.dir");
        System.out.println(System.getProperty("user.dir"));
        String path = project_path+ "\\src\\main\\java\\com\\welab\\automation\\projects\\demo\\Notifications.png";
        s.click("D:\\images\\test\\test01.png");

        Thread.sleep(5000);
        s.click("D:\\images\\test\\test02.png");
        System.out.println("pass");
    }

    public  void clickMobileElementByPicture(String picPath) throws URISyntaxException, IOException {
        File file = new File(picPath);
        String base64String = Base64.getEncoder().encodeToString(Files.readAllBytes(file.toPath()));
        By by= MobileBy.image(base64String);
        findMobileElement(by).click();
    }

    public MobileElement findMobileElement(By by) {
        return (MobileElement) driver.findElement(by);
    }

    private static AppiumDriverLocalService startAppiumService() {
        AtomicInteger port = new AtomicInteger();
        AppiumDriverLocalService service = null;
        service = new AppiumServiceBuilder()
                .usingAnyFreePort()
                .withIPAddress("0.0.0.0")
                .withArgument(SESSION_OVERRIDE)
                .withArgument(LOG_LEVEL, "error")
                .usingDriverExecutable(new File("D:\\Program Files\\nodejs\\node.exe"))
                .withAppiumJS(new File("C:\\Users\\jeff.xie\\AppData\\Roaming\\npm\\node_modules\\appium\\build\\lib\\main.js"))
                .build();
        Optional.ofNullable(service).ifPresent(s -> {
            s.start();
            port.set(s.getUrl().getPort());
        });
        AppiumDriverLocalService appiumDriverLocalService = service;
        return service;
    }

}

appium结合sikuli的简单实践_Xiamen_wiley的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值