我希望将一个文件上传到我应该测试的特定站点。如何使Selenium集中在文件对话框上?
当我尝试发送键盘笔划时,笔划会转到网站,而不是新文件对话框。
我的代码:
Actions builder = new Actions(browser);
builder.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).sendKeys(Keys.BACK_SPACE);
builder.sendKeys(keyBoardText).perform();
有几种上传文件的方法。通常我们上传文件时不需要点击网站上的上传按钮并打开文件对话框。
在Selenium中,您需要在站点页面上找到上传元素并发送本地文件位置。
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);
但请注意,当您使用Robot框架时,您需要释放鼠标,因为它会固定鼠标光标。
在这里你可以找到不同的上传文件的方法。
今天我了解到我只能在我点击的WebElement上使用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());
}