如何等待元素附加到DOM

时间:2018-07-27 15:43:17

标签: c# selenium selenium-webdriver

我使用了代码:-

do {
    let json = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String: AnyObject]
    if let sub = json["sub"] as? [String: AnyObject], let lastName = sub["lastname"] {
        print(lastName)
    }

} catch {
    print("error")
}

但是有人告诉我这不是最佳实践,很多时候都行不通。

HTML:

public Boolean RetryingFindClick(By by)
    {
        Boolean result = false;
        int attempts = 0;
        while (attempts < 4)
        {
            try
            {

                BrowserHelper.WebDriver.FindElement(by).Click();
                result = true;
                break;
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            attempts++;
        }
        return result;
    }

1 个答案:

答案 0 :(得分:3)

您可以使用显式等待条件来找到以下元素,它将等待直到在给定时间内该元素可单击为止。如果该元素未附加到DOM /在指定时间内不可单击,那么它将抛出autocomplete=off。因此,您可以在等待条件中指定所需的时间。

NuGet程序包:

TimeoutException

代码:

DotNetSeleniumExtras.WaitHelpers

编辑:

请在您的测试方法中添加click操作(从RetryingFindClick方法中删除)

public Boolean RetryingFindClick(By by){

    try
    {
        var  wait = new WebDriverWait(BrowserHelper.WebDriver, TimeSpan.FromSeconds(20));
        wait.Until(ExpectedConditions.ElementToBeClickable(by))    
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
        return false;//Element is not found until the specified time
    }
    return true;
}