2017-01-22 4 views
0

ユーザーを確認するために使用されるcookieにauthtokenがありますが、Nunitとcmdを使用してCerenium C#テストケースコードを実行しようとすると、Chromeインスタンスが起動し、Cookieがないためログインページにリダイレクトされます。問題は、テスト中に起動されるインスタンス内にクッキーが存在しないことと、この問題を解決する方法です。 これは私のコードです。なぜクッキーにアクセスせずにseleniumテストケースが実行されますか?

using NUnit.Framework; 
using OpenQA.Selenium; 
using OpenQA.Selenium.Chrome; 
using OpenQA.Selenium.Firefox; 
using System; 
using System.Text; 
using System.Text.RegularExpressions; 
using System.Threading; 

namespace AutomationTest 
{ 
    [TestFixture] 
    public class SeleniumTest 
    { 
     private IWebDriver driver; 
     private StringBuilder verificationErrors; 
     private string baseURL; 
     private bool acceptNextAlert = true; 

     [SetUp] 
     public void SetupTest() 
     { 
      driver = new ChromeDriver(); 
      baseURL = "http://localhost/"; 
      verificationErrors = new StringBuilder(); 
     } 

     [TearDown] 
     public void TeardownTest() 
     { 
      //try 
      //{ 
      // driver.Quit(); 
      //} 
      //catch (Exception) 
      //{ 
      // // Ignore errors if unable to close the browser 
      //} 
      //Assert.AreEqual("", verificationErrors.ToString()); 
     } 

     [Test] 
     public void TheSTest() 
     { 
      driver.Navigate().GoToUrl(baseURL + "/TrailHead/"); 
      driver.FindElement(By.Id("addNewLeadButton")).Click(); 
      driver.FindElement(By.CssSelector("td.formTitle > input.td-button")).Click(); 
      driver.FindElement(By.Id("township")).Clear(); 
      driver.FindElement(By.Id("township")).SendKeys("2n"); 
      driver.FindElement(By.Id("range")).Clear(); 
      driver.FindElement(By.Id("range")).SendKeys("2e"); 
      driver.FindElement(By.Id("section")).Clear(); 
      driver.FindElement(By.Id("section")).SendKeys("2"); 
      driver.FindElement(By.Id("legal")).Clear(); 
      driver.FindElement(By.Id("legal")).SendKeys("2"); 
      driver.FindElement(By.Id("NRI")).Clear(); 
      driver.FindElement(By.Id("NRI")).SendKeys("2"); 
      driver.FindElement(By.Id("NMA")).Clear(); 
      driver.FindElement(By.Id("NMA")).SendKeys("2"); 
      driver.FindElement(By.Id("tractAskedPrice")).Clear(); 
      driver.FindElement(By.Id("tractAskedPrice")).SendKeys("2"); 
      driver.FindElement(By.CssSelector("div.modalFooter > div.footer-right-button-save")).Click(); 
      driver.FindElement(By.XPath("//div[@onclick='saveAndExit()']")).Click(); 
      // Warning: assertTextPresent may require manual changes 
      Assert.IsTrue(Regex.IsMatch(driver.FindElement(By.CssSelector("BODY")).Text, "^[\\s\\S]*$")); 
     } 
     private bool IsElementPresent(By by) 
     { 
      try 
      { 
       driver.FindElement(by); 
       return true; 
      } 
      catch (NoSuchElementException) 
      { 
       return false; 
      } 
     } 

     private bool IsAlertPresent() 
     { 
      try 
      { 
       driver.SwitchTo().Alert(); 
       return true; 
      } 
      catch (NoAlertPresentException) 
      { 
       return false; 
      } 
     } 

     private string CloseAlertAndGetItsText() 
     { 
      try 
      { 
       IAlert alert = driver.SwitchTo().Alert(); 
       string alertText = alert.Text; 
       if (acceptNextAlert) 
       { 
        alert.Accept(); 
       } 
       else 
       { 
        alert.Dismiss(); 
       } 
       return alertText; 
      } 
      finally 
      { 
       acceptNextAlert = true; 
      } 
     } 
    } 
} 
+1

ようこそ!スタックオーバーフロー!デバッガの使い方を学ぶ必要があるようです。 [補完的なデバッグ手法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)にご協力ください。その後も問題が残っている場合は、もう少し詳しくお聞かせください。 –

答えて

1

Chrome WebDriverは、すべての作業を行うために一時セッションを使用します。あなたのユーザーとして設定したクッキーは持ち越されません。

これをオーバーライドする場合は、user-data-dirプロパティを使用できます。

ChromeOptions options = new ChromeOptions(); 
options.addArguments("user-data-dir=/path/to/your/custom/profile"); 

これはすべて、docsを見たものです。あなたはこの解決するために実装することができ多くの戦略があります

+0

私はこれを使用して、デフォルトのクロムインスタンスを開いていますが、GoToUrlは行っていません –

0

:ログイン機能がAPIである場合

  1. は、クッキーを取得し、ブラウザのテストセッションにこれらを追加するには、これを直接呼び出します。これは、ログイン後の機能テストに再利用できるという利点があります。 HttpWebRequestを実装する必要がありますが、それほど難しくはありません。
  2. 認証Cookieが変化しない場合は、手動で名前と値を取得し、セッションに追加することで、あなたのテストにこれを組み込むことができる:

    var cookie = new Cookie("CookieName","CookieValue"); driver.Manage().Cookies.AddCookie(cookie);

当社オプション2が用意されており、オプション1を実装中です。

関連する問題