[英]How to focus on file dialog box using Selenium to pick a file
我希望将文件上传到我应该测试的特定站点。 如何让 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()。
如果我只需要点击键盘 - 我需要使用 Robot 对象。
这段代码解决了我的问题:
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());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.