簡體   English   中英

如何用Java中斷Selenium線程

[英]How to interrupt an Selenium thread with Java

我正在嘗試為硒測試設置頁面刷新超時。 我正在嘗試做的是:

如果硒在數秒內無法在頁面上找到findElement,則findElement操作將停止並且頁面將刷新。

因此,我嘗試在Java中使用多線程來執行此操作:

  • 一個線程用於計數超時。
  • 其他線程(主線程)將用於執行操作。

問題是:我無法中斷findElement操作線程。 這些是嘗試執行測試時看到的線程列表:

  • 線程:附加偵聽器
  • 線程:完成
  • 線程:信號調度程序
  • 線程:刷新超時線程
  • 線程:線程6
  • 線程:將會話f7fea321-0acd-4df3-904d-52e32decb965上的findElements轉發到遠程
  • 線程:線程7
  • 線程:線程5

線程:主實際上更改為線程:將會話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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM