簡體   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