先说一下背景,这个是我们测试的系统上的一个上传文件的地方,但是用传统的selenium方法很难定位的到。具体的样子是下面这样的。

  使用id等属性定位做点击操作好像不能直接操作。无奈之下,只好从网上找找方法。于是乎,就发现了一个好玩的东西Sikulix。

  首先,我们需要准备以下,下载地址:https://raiman.github.io/SikuliX1/downloads.html

  先在项目中导入jar包,sikulixsetup-1.1.0.jar,然后在cmd命令行输入: java -jar sikulixsetup-1.1.0.jar进行安装。

  一般是选择这两个选项。

  经过一番摸索,发现这个东西的原理大概就是:在当前可视窗口中,寻找与你截图相同的区域,然后操作该区域的中心点坐标!

  安装完成后,最终会有几个东西,简单说下:

1.jar包:sikulix.jar,sikulixapi.jar,这两个jar包导入Eclipse中的project。具体导入buildpath---->add external libray

2.sikulix的IDE,runsikulix.cmd

  看名字就差不多能够明白啦。不过,我们这里只是使用它来定位我们想要点击的地方,因此我们先来截图。

  既然是寻找截图相同的区域,然后操作该区域的中心坐标。所以截图要讲究点,想点的地方尽量放在截图的中心。(精确度不是很好,好在我们可以点击的区域还是挺大的。)
上代码:
Screen s = new Screen();
String target = "F:\\abc\\pic\\test1.png";
Pattern tgp = new Pattern(target);
try {
  if(s.find(tgp) != null) {
    s.click(tgp);
    }
  }catch (FindFailed e) {
    e.printStackTrace();
  }

  从这段代码可以看出,我们是通过截图来匹配中心点的位置,从而实现点击。

  点击完成后,我们就可以使用上一篇介绍的AutoIt来实现文件的上传,从而使整个过程自动化了。

  不过,这里还有一点需要备注一下:

  对于selenium启动的firefox来说,是不加载任何插件的。所以,在浏览器进行初始化的时候,需要加载adobe-flash的插件!
  

  

System.setProperty("webdriver.gecko.driver", "c:\\geckodriver.exe");
FirefoxProfile profile = new FirefoxProfile();
//这一句是关键
profile.setPreference("plugin.state.flash", 2);
FirefoxOptions options = new FirefoxOptions();
options.setProfile(profile);
driver = new FirefoxDriver(options);
driver.manage().window().maximize();

  这里,profile.setPreference("plugin.state.flash", 2);这一句是关键。对应的值为:  0是禁止,1是询问,2是允许。

使用SikuliX定位Object(flash)元素的更多相关文章

  1. py+selenium 明明定位不到元素,但却不报错或是报错AttributeError: 'list' object has no attribute 'click'【已解决】

    问题:定位不到元素,但却不报错或者出现报错AttributeError: 'list' object has no attribute 'click' 如图  或者  解决方法:   将”driver ...

  2. Selenium定位一 --单个元素定位方法

    Selenium-Webdriver 提供了强大的元素定位方法,支持以下三种方法. 单个对象的定位方法 多个对象的定位方法 层级定位 定位单个元素在定位单个元素时,selenium-webdriver ...

  3. 如何借助浏览器Console使用Js进行定位和操作元素

    在进行Selenium自动化过程中,我们很难避免一些webdriver 很难定位到的一些元素(如:默认隐藏属性元素),那对于一些比较难定位到的元素,有什么好的解决办法?     其实我们都知道,Sel ...

  4. 为什么selenium定位不到元素

    在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的情况,一般可以从以下几个方面着手解决: 1.Frame/Iframe原因定位不到元素: 这个是最常见的原因,首先要理 ...

  5. Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)

         在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的情况(报selenium.common.exceptions.NoSuchElementException ...

  6. Selenium webdriver定位iframe里面元素两种方法

    以东方财富网登录页面为例: 在查找元素过程中,直接通过id或者xpath等找不到元素,查看页面源代码发现元素是属于iframe里,例如: <div class="wrap_login& ...

  7. UI自动化测试(三)对页面中定位到的元素对象做相应操作

    前两天分别讲述了UI自动化测试基础以及对页面元素该如何进行定位,这一篇自然就是对定位到的页面元素对象进行相应操作啦. 阅读目录 1.常用操作元素对象的方法 2.鼠标事件操作 3.键盘事件操作 4.We ...

  8. 自动化测试selenium(三) 由于iframe 定位不到元素

    iframe原因定位不到元素 现在的项目后台基本都是上左右结构,要出现这个结构效果,需要使用到了iframe标签: 我们先说说iframe在java中使用的方法: driver.switchTo(). ...

  9. Selenium webdriver定位iframe里面元素

    在查找元素过程中,直接通过id或者xpath等找不到元素,查看页面源代码发现元素是属于iframe里,例如: <div class="wrap_login"> < ...

随机推荐

  1. [LeetCode] 313. Super Ugly Number 超级丑陋数

    Write a program to find the nth super ugly number. Super ugly numbers are positive numbers whose all ...

  2. 了解一下JVM和GC工作机制

    题外话:很久没有写博客了,事情颇多,今天空闲下来,学习一下顺便写一下自己的了解,机会总是留给有准备的人,所以平常一定要注意知识的巩固和积累.知识的深度也要有一定的理解,不比别人知道的多,公司干嘛选你? ...

  3. windows好用的软件

    离线视频播放器 PotPlayer 强力删除 Wise Force Deleter

  4. kube-proxy运行机制分析【转载】

    转自:http://blog.itpub.net/28624388/viewspace-2155433/ 1.Service在很多情况下只是一个概念,而真正将Service的作用实现的是kube-pr ...

  5. Worker Thread模式

    工人线程Worker thread会逐个取回工作并进行处理,当所有工作全部完成后,工人线程会等待新的工作到来 5个工人线程从传送带取数据,3个传送工人线程将数据放入传送带 public class C ...

  6. Windows 下删除 Docker 容器的方法

    Issue: 删除命令执行失败 如果在 CMD 命令提示符下删除容器可能失败,可切换至 PowerShell 中执行成功. unknown shorthand flag: 'a' in -a See ...

  7. c++连接打印机(转载)

    Visual C++6.0是开发Windows应用程序的强大工具,但是要通过它实现程序的打印功能,一直是初学者的一个难点,经常有朋友询问如何在VC中实现打印功能,他们往往感到在MFC提供的框架内实现这 ...

  8. HTML学习--基础知识

    WEB a)       什么是WEB WEB,是基于Internet上的一种应用程序(网页应用程序),WEB页面,简称WEB页(网页),就是保存在服务器端上的一个具体的页面 b)       WEB ...

  9. centos7+ 在线yum安装docker-ce

    yum install -y yum-utils   //扩展yum功能 yum-config-manager --add-repo http://mirrors.aliyun.com/docker- ...

  10. App开放接口API安全性之Token签名Sign的设计与实现

    前言 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等, ...