sikuli介绍及解决点击flash按钮的问题

开始


还是继续上次的文章 解决 Selenium文件上传框无法识别的问题 在这篇文章里面介绍了如何解决windows文件上传框的问题。但是其实当时却避开了一个比较严重的问题,如何点击flash按钮。因为基本上纵观大多数的网页,对于要进行文件上传的按钮,都是采用的是flash的按钮来实现的。但是问题就来了。selenium是不识别flash的。那到底要如何才能解决这个问题呢。还是要靠我们的度娘啊。找到答案了—-sikuli

介绍、安装


MIT的研究人员设计了一种新颖的图形脚本语言Sikuli,计算机用户只须有最基本的编程技能(比如会写print”hello world”),他不需要去写出一行行代码,而是用屏幕截图的方式,用截出来的图形元素组合出神奇的程序。

感觉确实是有点神奇。简单的说就是通过图像识别,比对的方式,找到对应的按钮进行点击之类的操作了。

首先我们还是一步步来介绍下吧。进入sikulix的链接,或者直接点这里下载,下载下来以后运行jar,

这里写图片描述

选择使用的脚本语言以及你是否要使用其他编译器去使用它,也就是说是否要下载它的API。这边我默认选择的是1,2。按照流程一步步的下载吧。如果失败的话多安装几次吧。

使用


下载完,在你运行sikulixsetup的路径就会有SikulixIDE了。我们运行它。界面就如下图所示了。

这里写图片描述

我们来简单的写一段代码吧:

这里写图片描述

代码都是如此的有趣。步骤很简单,我们做的就是清空回收站的内容。我们看看运行的情况。

这里写图片描述

实际应用


下来我们看看sikuli与java selenium的结合使用吧。

我这里就贴下代码吧

//我们这里导入了sikuli api的包 这个jar也是在与IDE同路径下的
import org.sikuli.script.Screen;


private WebDriver driver;
private String baseUrl;
private Screen s;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer();
private String filePath ;

@Before
public void setUp() throws Exception {
    driver = new FirefoxDriver();
    baseUrl = "http://172.18.44.106:8888/";
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    driver.manage().window().maximize();
    //new一个Screen的对象
    s = new Screen();
    filePath = FileUtils.getCurrentPath();
}

@Test
public void test1() throws Exception {
    driver.get(baseUrl + "/iclass/edu/login.html");
    driver.findElement(By.id("username")).clear();
    driver.findElement(By.id("username")).sendKeys("wangyan");
    driver.findElement(By.id("password")).clear();
    driver.findElement(By.id("password")).sendKeys("123456");
    driver.findElement(By.cssSelector("button.btn.login-btn")).click();
    Thread.sleep(2000);
    driver.findElement(By.linkText("素材")).click();
    driver.findElement(By.linkText("个人素材")).click();

    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(new File(filePath+"\\res\\file.txt"))));
    String line ;
    while ((line = (bufferedReader.readLine()))!=null) {
        driver.findElement(By.linkText("上传素材")).click();
        //关键就这里了。调用Screen对象的click方法,参数为图片的路径以及点击的次数
        s.click(filePath + "\\pic\\1.png", 0);
        //由于java是操作不了windows的窗口界面的。所以我们这里直接是调用autoit来进行窗口操作。当然还有一些方法类似于使用Jnative来调用windows的api。可以尝试后发现。窗口关闭不能够支持中文,可能这里面是我个人的原理。所以我还是放弃了这个方法了。
        String command = "C:\\Users\\cvtpc\\Desktop\\1.exe "+filePath+"\\res\\"+line;
        Runtime.getRuntime().exec(command);
        Thread.sleep(3000);
        driver.findElement(By.name("resourceIntro")).clear();
        driver.findElement(By.name("resourceIntro")).sendKeys("123123");
        driver.findElement(By.id("save-upload")).click();
    }

}

结束

花了半天多的时间来研究这个,感觉至少简单的了解了sikuli,以及解决了flash按钮的点击了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值