如何在C# Selenium WebDriver中等待登录cookie?

3

我以前只用过Java,但现在需要在C#中设置一些测试。

在登录测试中,我希望有一个等待方法等待登录cookie被设置。

在Java中,我可以这样做,但无法在C#中创建相同的方法,请问有谁能帮我将此代码转换为C#?

    public void getTokenCookie(){
    try {
        wait.until(
                new ExpectedCondition<Cookie>() {
                    @Override
                    public Cookie apply(WebDriver webDriver) {
                        Cookie tokenCookie = driver.manage().getCookieNamed("nameOfCookie");
                        if (tokenCookie != null) {
                            System.out.println("\nToken Cookie added: " + tokenCookie);
                            return tokenCookie;
                        } else {
                            System.out.println("waiting for cookie..");
                            return null;
                        }
                    }
                }
        );

    } catch (Exception e){
        System.out.println(e.getMessage());
        fail("Failed to login, no cookie set");
    }
}
1个回答

5

在C#中,我认为以上内容应该如下所示:

public Cookie GetTokenCookie()
{
    var webDriver = new ChromeDriver(); //or any IWebDriver

    var wait = new WebDriverWait(webDriver, TimeSpan.FromSeconds(10));

    Cookie cookie = default(Cookie);

    try
    {
        cookie = wait.Until(driver =>
        {
            Cookie tokenCookie = driver.Manage().Cookies.GetCookieNamed("nameOfCookie");
            if (tokenCookie != null)
            {
                Console.WriteLine("\nToken Cookie added: " + tokenCookie);
                return tokenCookie;
            }
            else
            {
                Console.WriteLine("waiting for cookie...");
                return null;
            }
        });
    }
    catch (Exception e)
    {
        Console.WriteLine($"{e.Message}");
    }

    return cookie;
}

在dotnet绑定中,使用WebDriverWait.Until<T>时不需要使用ExpectedConditions。您可以只发送一个Func<IWebDriver, T>来作为条件。
值得注意的是,如果Until无法满足条件,则会在抛出异常之前检查配置的忽略异常类型列表。-有关配置详情请参见此处 有关使用dotnet绑定获取cookie的更多详细信息,请查看ICookieJar接口。
一般而言,有关使用dotnet绑定进行自定义等待的其他信息可在此处找到。
希望这能帮助您!

非常感谢你的解释和代码片段,Jordan。真的非常感激! - Mr Null

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接