[英]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.