简介: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; } }