[英]Catching user-generated events in selenium webdriver
我们可以捕获用户生成的Selenium WebDriver事件(或一般事件)吗? 我知道我们可以使用WebDriverWait和ExpectedConditions检查fe页面的状态,但这并不总是合适的。
假设我想等待用户输入继续执行测试类。 它看起来像这样:
driver.get("https://www.google.com");
waitForKey(driver, org.openqa.selenium.Keys.RETURN);
/* rest of code */
driver.quit();
其中waitForKey
将实现为:
public static void waitForKey(WebDriver driver, org.openqa.selenium.Keys key) {
Wait wait = new WebDriverWait(driver, 2147483647);
wait.until((WebDriver dr) -> /* what should be here? */);
}
有什么办法吗?
我从未听说过Selenium支持它。 但是,您可以通过在文档中添加一个eventListener来创建或更改DOM来自己制作。 然后,您可以使用Selenium来检测更改。 请参阅下面的示例。
该示例使用JavaScript Executor将keydown
侦听器添加到文档中。 按下Enter
键后,它将创建一个ID为onEnter
的div,然后将其添加到DOM中。 最后,Selenium将查找ID为onEnter
的元素,然后单击Web中的链接。
driver.get("http://buaban.com");
Thread.sleep(5000);
String script = "document.addEventListener('keydown', function keyDownHandler(event) {" +
" const keyName = event.key;" +
" if(keyName===\"Enter\") {" +
" var newdiv = document.createElement('DIV');" +
" newdiv.id = 'onEnter';"+
" newdiv.style.display = 'none';"+
" document.body.appendChild(newdiv);" +
" }" +
"});";
((JavascriptExecutor)driver).executeScript(script);
WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("onEnter")));
driver.findElement(By.cssSelector("#menu-post a")).click();
Thread.sleep(5000);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.