[英]How to interrupt an Selenium thread with Java
我正在嘗試為硒測試設置頁面刷新超時。 我正在嘗試做的是:
如果硒在數秒內無法在頁面上找到findElement,則findElement操作將停止並且頁面將刷新。
因此,我嘗試在Java中使用多線程來執行此操作:
問題是:我無法中斷findElement操作線程。 這些是嘗試執行測試時看到的線程列表:
線程:主實際上更改為線程:將會話f7fea321-0acd-4df3-904d-52e32decb965上的findElements轉發到遠程。 為了解決這個問題,我將這個線程稱為“ findElement線程”。
當我嘗試中斷“ findElement線程”時,findElement動作仍在運行而沒有任何中斷。 我嘗試中斷另一個線程(線程:Thread-5),但是它將刪除與當前Web驅動程序的連接,並且測試將失敗。 我不知道我做錯了什么,是正確的線程被打斷了嗎?
感謝您閱讀本文。 任何建議將不勝感激。
經過調查,我發現這是不可能的:
當我們使用Java調用Web驅動程序執行Selenium操作時,該操作將轉移到Web驅動程序以執行,此時我們將無法再操作此操作,更不用說它用於執行此操作的線程了,因為從這一點上講,Web驅動程序控制的是Java的執行。
實現目標的另一種方法是簡單地使用Selenium的FluentWait API,並在每次輪詢以查找所請求的元素時啟動頁面刷新:
Wait<WebDriver> wait = new FluentWait<>(driver)
.withTimeout(30, TimeUnit.SECONDS)
.pollingEvery(5, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class);
WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
@Override
public WebElement apply(WebDriver driver) {
driver.navigate().refresh();
return driver.findElement(...));
}
});
如果在頁面上動態加載了元素,則可能還應該在調用driver.findElement(...)之前等待頁面加載。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.