hea*_*rdm 5 selenium selenium-webdriver
如何在 Selenium 中按 Shift + Ctrl + s ?我使用了下面的代码:
Actions action = new Actions(driver);
action.sendKeys(Keys.chord(Keys.SHIFT + Keys.CONTROL + "s")).perform();
Run Code Online (Sandbox Code Playgroud)
它的投掷错误
如果您只是发送一系列按键,则每个按键代码的 Webdriver 首先按下给定的按键,然后按下它。
所以你的代码sendKeys(Keys.chord(Keys.SHIFT + Keys.CONTROL + "s")相当于下面一系列事件发生的时间:
这不是您想要的,因为您期望 Ctrl 和 Shift 已被按下,并且在按下 S 键时被按住。
您需要使用Actions#keyDown方法按下该键并将其保持按下状态,然后使用Actions#keyUp释放该键。因此,操作顺序可能是:
keyDownkeyDownsendKeys方法)keyUpkeyUp必须完成第 5 点和第 6 点(释放按键),以避免稍后在测试代码中出现意外影响(不要将 Ctrl+Shift 保持在按下状态)。
这是jsfiddle 上简单页面的链接,它可以帮助我们测试 WebDriver 代码。
<body>
<p>Press a key on the keyboard in the input field to find out if the Ctrl-SHIFT key was pressed or not.</p>
<input id="ctrl_shift_s" type="text" onkeydown="isKeyPressed(event)">
<p id="demo"></p>
<script>
function isKeyPressed(event) {
console.log( event.keyCode);
var x = document.getElementById("demo");
if (event.shiftKey && event.ctrlKey && event.keyCode == 83 ) {
x.innerHTML = "The Ctrl-SHIFT-S keys were pressed!";
} else {
x.innerHTML = "Please press Ctrl-SHIFT-S";
}
}
</script>
</body>
Run Code Online (Sandbox Code Playgroud)
如果将光标移至此页面上的 INPUT 字段(该元素的 id="ctrl_shift_s"),然后按 Ctrl-SHIFT-S 键(按住 SHIFT 和 Ctrl),则会出现一条消息。Ctrl-SHIFT-S 键被压了!

下面是使用最新的 IE、Firefox 和 Chrome 驱动程序根据上述测试页进行测试的示例(工作)代码。您必须使用requireWindowFocus();选项才能Actions在 IE 驱动程序中运行。
WebDriver driver= null;
try{
System.setProperty("webdriver.ie.driver", "C:\\instalki\\IEDriverServer.exe");
System.setProperty("webdriver.chrome.driver", "C:\\instalki\\chromedriver.exe");
System.setProperty("webdriver.gecko.driver", "C:\\instalki\\geckodriver.exe");
InternetExplorerOptions opt = new InternetExplorerOptions();
opt.requireWindowFocus();
// driver=new InternetExplorerDriver(opt);
// driver = new ChromeDriver();
driver = new FirefoxDriver();
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait( driver, 10);
driver.get("https://jsfiddle.net/39850x27/2/");
final By inputField = By.id("ctrl_shift_s");
final By messageWeWaitFor = By.xpath("//*[text() = 'The Ctrl-SHIFT-S keys were pressed!' ]");
final By frame = By.name("result");
// Swift to a frame (our test page is within this frame)
driver.switchTo().frame(driver.findElement(frame));
// move a corsor to the field
wait.until(ExpectedConditions.elementToBeClickable(inputField)).click();
Actions a = new Actions(driver);
// Press SHIFT-CTRL-S
a.keyDown(Keys.SHIFT)
.keyDown(Keys.CONTROL)
.sendKeys("s")
.build()
.perform();
//Wait for a message
wait.until(ExpectedConditions.visibilityOfElementLocated(messageWeWaitFor));
System.err.println("Success - Ctrl-Shift-S were pressed !!!");
// Sleep some time (to see the message is really on the page)
Thread.sleep(5000);
// Release SHIFT+CTRL keys
a.keyUp(Keys.CONTROL)
.keyUp(Keys.SHIFT)
.build()
.perform();
}finally {
if(driver!=null) {
driver.quit();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37398 次 |
| 最近记录: |