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) {
;
}
}