Selenium——文件另存为

1. 背景
Selenium自动化不支持多选和文件另存为

2. 解决方案
Action和Robot实现文件另存为和多选

import org.openqa.selenium.interactions.Actions;
import java.awt.Robot;

3. CTRL+A多选

Actions ac = new Actions(driver);
ac.keyDown(Keys.CONTROL);	// ac.keyDown(Keys.SHIFT) 控件连续且较多时使用
ac.click(WebElement1);
ac.click(WebElement2);
ac.keyUp(Keys.CONTROL);		// ac.keyUp(Keys.SHIFT)
ac.perform();

此方案在ie浏览器下无法动作(Selenium3.9 + IEDriver3.4.0 + ie11)。

Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);	// robot.keyPress(KeyEvent.VK_SHIFT);
WebElement1.click();
WebElement2.click();
--------------------------------------
click的替代方案:
robot.mouseMove(WebElement1.getLocation().x, WebElement1.getLocation().y);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
--------------------------------------
robot.keyRelease(KeyEvent.VK_CONTROL);	// robot.keyRelease(KeyEvent.VK_SHIFT);

此方案在chrome浏览器下无法动作(Selenium3.9 + ChromeDriver87 + Chrome87)。

4. 另存为

	public void type(String characters) {
		StringSelection stringSelection = new StringSelection(characters);
		Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
		robot.keyPress(KeyEvent.VK_CONTROL);
		robot.keyPress(KeyEvent.VK_V);
		robot.keyRelease(KeyEvent.VK_V);
		robot.keyRelease(KeyEvent.VK_CONTROL);
	}
	
	public String download(WebDriver driver, String Name) {
		try {
			File file = new File(Name);
			if (file.exists()) {	// 删除同名文件
				file.delete();
			}
			
			robot = new Robot();
			robot.setAutoDelay(1000);
			if (System.getProperty("browser").equals("ie")) {
				// 获取下载框交点,弹出另存为
				robot.keyPress(KeyEvent.VK_ALT);
				robot.keyPress(KeyEvent.VK_N);
				robot.keyRelease(KeyEvent.VK_N);
				robot.keyRelease(KeyEvent.VK_ALT);
				robot.delay(1000);
				robot.keyPress(KeyEvent.VK_TAB);
				robot.keyRelease(KeyEvent.VK_TAB);
				robot.delay(1000);
				robot.keyPress(KeyEvent.VK_DOWN);
				robot.keyRelease(KeyEvent.VK_DOWN);
				robot.delay(1000);
				robot.keyPress(KeyEvent.VK_DOWN);
				robot.keyRelease(KeyEvent.VK_DOWN);
				robot.delay(1000);
				robot.keyPress(KeyEvent.VK_ENTER);
				robot.keyRelease(KeyEvent.VK_ENTER);
			}
			else if(System.getProperty("browser").equals("edge"))
			{
				// 获取下载框交点,弹出另存为
				robot.keyPress(KeyEvent.VK_F6);
				robot.keyRelease(KeyEvent.VK_F6);
				Thread.sleep(1000);
				robot.keyPress(KeyEvent.VK_TAB);
				robot.keyRelease(KeyEvent.VK_TAB);
				robot.keyPress(KeyEvent.VK_TAB);
				robot.keyRelease(KeyEvent.VK_TAB);
				robot.keyPress(KeyEvent.VK_TAB);
				robot.keyRelease(KeyEvent.VK_TAB);
				robot.keyPress(KeyEvent.VK_ENTER);
				robot.keyRelease(KeyEvent.VK_ENTER);
			}
			robot.delay(2000);
			type(Name);
			robot.delay(1000);
			robot.keyPress(KeyEvent.VK_ALT);
			robot.keyPress(KeyEvent.VK_S);
			robot.keyRelease(KeyEvent.VK_S);
			robot.keyRelease(KeyEvent.VK_ALT);
			robot.delay(1000);
			robot.keyPress(KeyEvent.VK_ALT);
			robot.keyPress(KeyEvent.VK_Q);
			robot.keyRelease(KeyEvent.VK_Q);
			robot.keyRelease(KeyEvent.VK_ALT);
		} catch (AWTException e) {
			;
		} catch (Exception e) {
			;
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值