2017-01-22 4 views
0

есть файл authtoken в файлах cookie, который используется для проверки пользователя, но когда я пытаюсь запустить тестовый код selenium C# с использованием Nunit и cmd, запуск экземпляра chrome и нет файлов cookie, поэтому он перенаправляет меня на страницу входа. вопрос в том, почему в экземпляре, который запускается во время теста, нет куки, и как я разрешаю эту проблему. это мой код.Почему тестовый чехол селена работает без доступа к куки?

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 использует временную сессию для выполнения всей своей работы. Таким образом, любые файлы cookie, которые вы установили в качестве пользователя, не переносятся.

Если вы хотите отменить это, вы можете использовать user-data-dir.

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

Все это касалось их взглядов на их docs.

+0

Я использовал это, он открыл по умолчанию хром-экземпляр, но он не GoToUrl, что мне нужно перейти к –

0

Есть целый ряд стратегий, которые вы могли бы реализовать, чтобы решить эту проблему:

  1. Если функциональность Войти является API, называют это непосредственно, чтобы получить печенье и добавить их к тестовой сессии браузера. Преимущества этого в том, что его можно использовать повторно для любых тестов функциональности, которые после входа. Вам нужно будет реализовать HttpWebRequest, но не должно быть слишком сложно.
  2. Если куки аутентификации не изменится, вы можете вручную получить имя и значение и включить это в ваших тестов, добавив его к сессии:

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

Наша компания имеет вариант 2 на месте, и мы находимся в процессе реализации варианта 1.