簡體   English   中英

異常:等待時“ xx秒后超時”。直到Selenium WebDriver C#

[英]Exception: “Timed Out After xx seconds” on wait.until Selenium WebDriver C#

我試圖弄清楚如何等待條件以便使用Selenium Driver登錄到網頁。 但是,它並不像看起來那樣簡單。 我正在研究Thread.Sleep(3000); 但我相信應該有更好的解決方案。 因此,我的代碼如下:

  1. 用firefox驅動程序加載頁面。
  2. 執行一個javascript代碼片段以更改語言(我需要等待此時間才能登錄)。

     IJavaScriptExecutor executor = (IJavaScriptExecutor)firefox; executor.ExecuteScript("arguments[0].click();", idioma_español); 
  3. 以上說明導致頁面重新加載。

  4. 下一條指令旨在等待頁面重新加載

     WebDriverWait wait = new WebDriverWait(newDriver,TimeSpan.FromSeconds(10)); wait.Until(ExpectedConditions.TextToBePresentInElementValue(element,textToAppear)); 
  5. 繼續登錄。

但是,當我運行代碼時,它將引發以下異常:

在此處輸入圖片說明

仔細查看de輸出,我發現了這一點:

在此處輸入圖片說明

在此處輸入圖片說明

我試着用不同的預期條件,如: TextToBePresentInElementElementExists ; 但會引發相同的異常。

我還嘗試了ExecuteAsyncScript("arguments[0].click();", idioma_español); 方法,但會引發“文檔已卸載”異常。

看起來text元素已被替換,因此該元素已過時。 我認為您可以通過每次獲取新元素來解決它。 參見下面的代碼:

public bool WaitForTextToAppear(IWebDriver driver, By elementLocator, string textToAppear, int timeoutInSec=10)
{
    IWait<IWebDriver> wait = new DefaultWait<IWebDriver>(driver);
    wait.Timeout = TimeSpan.FromSeconds(timeoutInSec);
    wait.PollingInterval = TimeSpan.FromMilliseconds(300);
    try
    {
        wait.Until(d => IsTextPresentedIn(d, elementLocator, textToAppear));
        return true;
    }
    catch (Exception ex)
    {
        System.Diagnostics.Debug.WriteLine("Error: " + ex.Message);
        return false;
    }
}

private bool IsTextPresentedIn(IWebDriver driver, By elementLocator, string textToAppear)
{
    try
    {
        var elements = driver.FindElements(elementLocator);
        if (elements.Count>0 && elements[0].Text.Equals(textToAppear, StringComparison.OrdinalIgnoreCase))
            return true;
    }
    catch
    {
        return false;
    }
    return false;
}
// using the web driver extension.
bool textAppeared = WaitForTextToAppear(driver, By.CssSelector("selector-of-the-text-element"), "HERE IS THE EXPECTED TEXT");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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