2017-02-20 59 views
0

我以前只使用過Java,但需要在C#中設置一些測試。如何在C#Selenium WebDriver中等待登錄cookie?

在登錄測試中,我喜歡用等待方法等待登錄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

在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未能符合條件,它將在投擲前檢查配置的忽略異常類型列表。 - Details on configuring these

有關使用dotnet綁定獲取cookie的更多詳細信息,請查看ICookieJar接口。

自定義等待dotnet綁定的其他信息一般可以在here找到。

希望這會有所幫助!

+0

非常感謝解釋和代碼片段喬丹,真的很感激! –

相關問題