Java 如何使用Selenium拾取文件“聚焦于文件”对话框
我想上传一个文件到一个特定的网站,我应该测试。 如何使Selenium集中在“文件”对话框上 当我尝试发送键盘笔划时,笔划将转到站点,而不是“新建文件”对话框 我的代码:Java 如何使用Selenium拾取文件“聚焦于文件”对话框,java,selenium,selenium-chromedriver,Java,Selenium,Selenium Chromedriver,我想上传一个文件到一个特定的网站,我应该测试。 如何使Selenium集中在“文件”对话框上 当我尝试发送键盘笔划时,笔划将转到站点,而不是“新建文件”对话框 我的代码: Actions builder = new Actions(browser); builder.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).sendKeys(Keys.BACK_SPACE); builder.sendKeys(
Actions builder = new Actions(browser);
builder.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).sendKeys(Keys.BACK_SPACE);
builder.sendKeys(keyBoardText).perform();
上传文件有几种方法。 通常我们上传文件时不点击网站上的上传按钮并打开文件对话框 在Selenium中,您需要在站点页面上找到upload元素并发送本地文件位置
driver.findElement(By.id("Upload Element")).sendKeys("PathToFile");
如果您喜欢打开文件对话框,那么我建议您使用Robot框架
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
但是请记住,当你使用机器人框架时,你需要释放鼠标,因为它会抓住鼠标光标
您可以找到不同的上传文件的方法。今天,我了解到我只能在单击的Web元素上使用Actions.sendKeys() 如果我只需要点击键盘-我需要使用机器人对象 此代码解决了我的问题:
softAsserter = new SoftAsserter(testParameters);
String textToType = testParameters.get("actionData");
Robot robot = null;
try {
robot = new Robot();
for (char c : textToType.toCharArray()) {
int keyCode = KeyEvent.getExtendedKeyCodeForChar(c);
if (KeyEvent.CHAR_UNDEFINED == keyCode) {
logger.error("Key code not found for character '" + c + "'");
}
else {
try {
robot.keyPress(keyCode);
robot.delay(10);
robot.keyRelease(keyCode);
robot.delay(10);
}
catch (Exception e) {
if (c=='_') {
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_MINUS);
robot.keyRelease(KeyEvent.VK_MINUS);
robot.keyRelease(KeyEvent.VK_SHIFT);
}
if (c==':') {
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SHIFT);
}
}
}
}
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyPress(KeyEvent.VK_ENTER);
}
catch (Exception ex) {
logger.error(ex.getMessage());
}