Sikuli 集成Selenium Webdriver 上传文件-- Java

Sikuli 集成Selenium Webdriver -- Java

  • 目录
    • Sikuli简介
    • 主要目的
    • 环境设置
        • 第一种
        • 第二种
    • 用Sikuli上传文件
        • 代码解释
    • 结论

目录

Sikuli简介

Sikuli是由MIT(麻省理工学院) 研究团队发布的一种图形化编程技术(编程小白的福音),使用Sikuli你只需要会写HelloWorld这种最基本的编程技能即可,用Sikuli不需要去写出一行行复杂的代码,而是用屏幕截图的方式,用截出来的图形元素组合出神奇的程序。

  1. Sikuli官网:http://slides.sikuli.org/
  2. API doc :http://nightly.sikuli.de/docs/index.html
  3. Sikuli是开源的,源码可在Github查看:https://github.com/sikuli/sikuli

主要目的

在自动化的过程中,不管是web端还是APP端,你可能会遇到一些元素无法定位(就是完全没有任何属性,反正我是遇到过。。),导致一些操作无法实施,你可能借助一些第三方的工具来实施,比如说处理文件的上传(这个在之前的博客中有写过两种方法查看),今天主要用上传文件演示Sikuli的调用方法。

环境设置

这边介绍两种调用Sikuli的方法(必须已经配置过Java环境,Java环境配置:查看):

第一种

首先下载sikuli的jar包,地址:https://raiman.github.io/SikuliX1/downloads.html,
打开链接,点击下载:Sikuli 集成Selenium Webdriver 上传文件-- Java_第1张图片
将下载的jar包加入到引用库中,我这里用的是IDEA的编译器(强烈推荐,不过还是选择自己喜欢的),方法:

  1. 首先打开Idea编译器点击File->Project Structure
    Sikuli 集成Selenium Webdriver 上传文件-- Java_第2张图片
  2. 依次点击Modules->Dependencies-> +
    Sikuli 集成Selenium Webdriver 上传文件-- Java_第3张图片
  3. 选择下载好的sikulixapi.jar包点击OK,你将会看到:
    Sikuli 集成Selenium Webdriver 上传文件-- Java_第4张图片
    第一种的环境已经可以了,你可以尝试以一下,启动桌面上的Chrome(运行代码时确保桌面上Chrome的图标没有被其他窗口遮挡,要不然会报错的)。
import org.sikuli.script.FindFailed;
import org.sikuli.script.Screen;

public class sikuliTest {
    public static void main(String[] args) throws FindFailed {
    Screen s = new Screen();
//    定义图片路径
    String imgPath = "H:\\code\\sikuliTest\\src\\test\\java\\imgs\\Chrome.png";
//    点击应用
    s.doubleClick(imgPath);
    }
}

第二种

第二种相对简单,直接用构建工具maven来实现

  1. 首先本地要有maven的环境(没有配置的需要自行配置,自行度娘去)
  2. 创建一个maven项目在pom.xml中引入插件,根据不同的系统选择不同的依赖插件,这里是Windows的,插件选择地址:查看


    com.sikulix
    sikulixapi
    1.1.0



    com.sikulix
    sikulixlibswin
    1.1.1

加入到pom中之后,运行下载依赖包
Sikuli 集成Selenium Webdriver 上传文件-- Java_第5张图片
至此,第二种方法也已经介绍完毕,可以用上边的代码验证。

用Sikuli上传文件

import org.sikuli.script.*;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.By;


public class fileUploadBySikuli {
    public static void main(String[] args) throws FindFailed {

        System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
        String imgPath = "H:\\study\\code\\sikuliTest\\src\\test\\java\\imgs\\";
        String inputFilePath = "H:\\study\\code\\sikuliTest\\src\\test\\java\\tempTest\\";
        Screen s = new Screen();
        Pattern fileInputTextBox = new Pattern(imgPath + "fileTextBox.PNG");
        Pattern openButton = new Pattern(imgPath + "openButton.PNG");
        WebDriver driver;

        driver = new ChromeDriver();

        // 两个个上传文件的demo,任选其一就好
        driver.get("http://demo.guru99.com/test/image_upload/index.php");
        driver.findElement(By.xpath(".//*[@id='photoimg']")).click();
        // 第二个
//        driver.get("http://www.sahitest.com/demo/php/fileUpload.htm");
//        driver.findElement(By.xpath("//*[@id=\"file5\"]")).click();
        // 等待输入框出现
        s.wait(fileInputTextBox, 20);
        //输入上传文件的路径
        s.type(fileInputTextBox, inputFilePath + "test.txt");
        //点击打开按钮
        s.click(openButton);
        driver.close();
    }
}

代码解释

  1. 设置driver的可执行路径
	System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
  1. 定义图片保存路径和上传文件的路径(需要手动将要用到的图片截图保存到相应的文件夹中)
    Sikuli 集成Selenium Webdriver 上传文件-- Java_第6张图片
  2. 接下来就是创建Screen和Pattern类的对象了具体用法参考:查看
 		Screen s = new Screen();
        Pattern fileInputTextBox = new Pattern(imgPath + "fileTextBox.PNG");
        Pattern openButton = new Pattern(imgPath + "openButton.PNG");
  1. 启动浏览器并打开链接,点击上传按钮
        driver = new ChromeDriver();
        driver.get("http://demo.guru99.com/test/image_upload/index.php");
        driver.findElement(By.xpath(".//*[@id='photoimg']")).click();
  1. 等到Windows弹窗出现,sikuli开始操作,首先等待输入框出现,然后输入上传文件的路径,点击打开
       s.wait(fileInputTextBox, 20);
        //输入上传文件的路径
        s.type(fileInputTextBox, inputFilePath + "test.txt");
        //点击打开按钮
        s.click(openButton);

Sikuli 集成Selenium Webdriver 上传文件-- Java_第7张图片

  1. 最终上传上传成功,关掉浏览器
    Sikuli 集成Selenium Webdriver 上传文件-- Java_第8张图片

结论

Sikuli用于处理web页面上的一些无法定位的对象和windows弹出窗口。当用户界面上的元素不经常更改时,可以使用Sikuli实现。不过这个软件代码的可移植性比较差,有的平台图片识别度不高。总的来说,与Robot和AutoIT等其他框架相比,Sikuli受到的青睐较少,不过还是可以用来辅助识别一些元素的。

你可能感兴趣的:(Java,自动化测试,selenium,自动化测试)