Selenium实现右键保存图片(Java)
1.代码
public class SaveImage extends TestCase {
private WebDriver driver;
private Actions action;
private String baseUrl;
@Before
public void setUp() throws Exception {
baseUrl = "http://baike.pcbaby.com.cn/recipe/";
System.setProperty("webdriver.chrome.driver",
"C:\\Users\\test\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
action = new Actions(driver);
}
@Test
public void testDownload() throws Exception {
driver.get(baseUrl);
WebElement info = new WebDriverWait(driver, 10)
.until(ExpectedConditions.presenceOfElementLocated(By.xpath(".//a[2]/em")));
assertEquals("食谱", info.getText());
driver.findElement(By.linkText("1")).click();
WebElement image = driver.findElement(By.xpath(".//*[@class='pic']/a/img"));
action.contextClick(image).build().perform();
try {
/*
* 使用Actions没办法拿到右键菜单 action.sendKeys(Keys.ARROW_DOWN).perform();
* action.sendKeys(Keys.ARROW_DOWN).perform();
* action.sendKeys(Keys.ENTER).perform();
* 使用Java原生键盘操作类Robot
*/
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_DOWN);
Thread.sleep(1000);
robot.keyPress(KeyEvent.VK_DOWN);
Thread.sleep(1000);
robot.keyPress(KeyEvent.VK_DOWN);
Thread.sleep(1000);
robot.keyPress(KeyEvent.VK_DOWN);
Thread.sleep(1000);
robot.keyPress(KeyEvent.VK_DOWN);
Thread.sleep(1000);
robot.keyPress(KeyEvent.VK_DOWN);
Thread.sleep(1000);
robot.keyPress(KeyEvent.VK_DOWN);
Thread.sleep(1000);
robot.keyRelease(KeyEvent.VK_DOWN);
Thread.sleep(1000);
robot.keyPress(KeyEvent.VK_ENTER);
} catch (Exception e) {
e.printStackTrace();
}
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
//使用autoit实现保存
Runtime.getRuntime().exec("E:\\storage\\selenium\\download\\test.exe");
//等待保存完成
Thread.sleep(10000);
} catch (Exception e) {
e.printStackTrace();
}
}
@After
public void tearDown() throws Exception {
driver.quit();
}
}
2.使用autoit实现保存
使用autoit拖动Finder Tool到需要获取界面信息的输入框及按钮。

3.编写autoit实现保存代码
ControlFocus("另存为", "","Edit1")
;ControlFocus("title","text",controlID) Edit1=Edit instance 1
WinWait("[CLASS:#32770]","",10)
$text = ControlGetText("另存为", "","Edit1")
$filename = "E:\storage\selenium\download\" + $text
Sleep(1000)
ControlSetText("另存为", "", "Edit1", $filename)
Sleep(5000)
;ControlFocus("另存为", "","Button1")
ControlClick("另存为","保存(&S)","Button1")
4.使用autoit的Compile Script to .exe工具将该au3文件转为.exe可执行文件
Selenium实现右键保存图片(Java)的更多相关文章
- selenium webdriver 右键另存为下载文件(结合robot and autoIt)
首先感谢Lakshay Sharma 大神的指导 最近一直在研究selenium webdriver右键菜单,发现selenium webdriver 无法操作浏览器右键菜单,如图 如果我想右键另存为 ...
- 使用selenium实现右键另存为保存文件
1.需要借住autoit工具和Robot类,下载地址:https://www.autoitscript.com/site/autoit/downloads/ 2.autoit的使用不再详细讲解.如下图 ...
- selenium webdriver 环境搭建--java
selenium java环境的安装可以分为三个部分:jdk.eclipse和selenium. jdk jdk(java development kit)是sun公司针对java开发人员的产品,是整 ...
- idea 右键无java class选项
项目中新建module之后,要在该目录下新增java Class文件,右键——>New发现无Java Class选项. File –Project Structure或者ctrl+alt+shi ...
- selenium定位方法(java实例)(二)
从下图中可以看到selenium有三类定位元素的方法,一种是直接通过属性.标签以及链接来定位,一种是XPath方式,最后一种是CSS方式. 下表列举了元素定位的例子 selenium之页面元素定位方法 ...
- Selenium二次封装-Java版本
package com.yanfuchang.selenium.utils; import java.awt.AWTException; import java.awt.Robot; import j ...
- Selenium启动Firefox示例(java版)
本文示例使用selenium启动Firefox,并将浏览器窗口最大化,在百度搜索框内输入"HelloWorld",最后点击搜索按钮. 源代码如下: 1 package com.se ...
- selenium元素定位(Java)
1.使用findElement方法定位元素 findElement()方法:当开始寻找符合指定条件的元素时,它将查询整个DOM,然后返回第一个找到的匹配元素. By id:通过元素ID属性定位 ...
- Selenium使用总结(Java版本)
硒在最近的发展中被广泛应用,因为它以前没有被使用过,并且已经走了太多的坑.这是一张唱片. 1.环境配置 配置要点: 1.Web驱动程序应该与浏览器版本相对应,chrome使用chrome驱动程序和ch ...
随机推荐
- MVC通过服务端对数据进行验证(和AJAX验证一样)
在实体类中 添加 Remote属性,指定用某个View下的某个方法进行验证,如下面表示用User控制器中的UserExiting方法验证 public class User { [Remot ...
- oracle导入时报错
之前在oracle数据库中新建了一个表空间和用户,在新建的用户下导入".dmp"文件是出现了这个错误. 解决方法: 使用管理员登陆进去,创建一个对应的表空间和用户,就OK了. (表 ...
- 谈谈let与const
let 命令 let命令用于声明变量,但是与传统var命令的不同之处在于拥有以下特性: 使用let命令声明的变量只在let命令所在的代码块内有效(我将之称为变量绑定): 不存在变量提升: 存在暂时性死 ...
- vSphere SDK for Java - 从模板部署虚拟机并配置IP地址
vSphere for Java类库:vijava 虚拟机配置类 package com.vmware.vcenter_event.VirtualMachine; import com.vmwa ...
- java计算两个日期之间相隔的月份(向下取整)
最近需求里面有个需要计算两个日期之间相隔的月份,写起来还挺繁琐,需要将各种情况都要考虑到,写了一个作为以后自己的工具吧. //获取哪一天 public static int getDay(Date d ...
- spark SQL学习(案例-统计每日销售)
需求:统计每日销售额 package wujiadong_sparkSQL import org.apache.spark.sql.types._ import org.apache.spark.sq ...
- PAT1075. PAT Judge (25)
其中在排名输出上参照了 http://blog.csdn.net/xyzchenzd/article/details/27074665,原先自己写的很繁琐,而且还有一个测试点不通过. #include ...
- Gym - 100712G Heavy Coins(二进制枚举)
https://vjudge.net/problem/Gym-100712G 题意:给出n枚不同价值的硬币和一个总价S,现在要选择尽量多的硬币来大于等于S,要求是比如说现在选择的硬币的总和为sum,那 ...
- 配置Eclipse可以查看JDK类库源码
一.配置方法 配置Eclipse可以查看JDK类库源码 Window->Preferences->Java->Installed JREs 若没有JRE,需要自己添加进来,有的话,点 ...
- DataContext的在控件树上的传递
控件树,在树上的每一个分支,包括叶子(比如:grid,stackpanel,lable,TextBlock)等,都有DataContext属性,并且该值可以实现从“外层”向内层传递 <Grid ...