繁体   English   中英

在Selenium Webdriver中捕获用户生成的事件

[英]Catching user-generated events in selenium webdriver

我们可以捕获用户生成的Selenium WebDriver事件(或一般事件)吗? 我知道我们可以使用WebDriverWaitExpectedConditions检查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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM