2016-06-21 3 views
1

Я использую Selenium Webdriver, написанный на C# в течение нескольких месяцев, и я с ним довольно хорошо справляюсь. Вот мой сценарий в работе, в настоящее время я тестирую пользовательский интерфейс для веб-браузера. Проблема в том, что мне нужно протестировать сразу нескольких пользователей и контролировать память сервера и т. Д. Я использовал jMeter в прошлом для тестирования нагрузки на сервер, и я бы очень хотел использовать селен, чтобы сделать что-то подобное с максимально возможным количеством пользователей.C# - Selenium Webdriver - Headless Browser - Unit Testing - Основы

Из того, что я понимаю, я мог бы достичь этого, используя браузер без использования гарнитуры в сочетании с Selenium (для тех, кто не знает, загрузка нескольких браузеров, как правило, потребляет вашу память устройства и ограничивает вас до 6/7 браузеров, которые вы можете запустить одновременно)

Итак, я полагаю, что я использую безгласный браузер и посмотрю, как много я могу получить сразу. Мое исследование побуждает меня поверить, что я могу использовать SimpleBrowser вместе с селеном для достижения этого.

Трудно найти примеры сочетания двух из них. Итак, мой первый вопрос о многих - если это безголовый браузер, действительно ли существуют элементы страницы или это просто запросы, которые отправляются между клиентом и сервером?

Например, если я использую селен, чтобы найти элемент на странице, я написал бы

IWebElement имя пользователя = driver.FindElement (By.XPath ("// ввод [@ ид = 'MainContent_txtUsername']")); username.SendKeys (userUserName);

Я написал это же для модульного теста и сказал, что он прошел. Однако, когда я отправляю пароль и «нажимаю» кнопку входа, я не могу пройти следующий тестовый метод. т. е. после входа в систему я ожидаю найти кнопку со значением «Изменить пароль компании». Этот модульный тест не проходит, поэтому он заставляет меня думать, что он не зарегистрировался.

Итак, мой вопрос: в безголовом браузере эти элементы существуют вообще или как это работает? Если да, как мне нажать кнопку входа? Спасибо Ребята

Вот мой код:

[TestMethod] 
     public void AddPhoneToCartAndVerifyInCart() 
     { 
      //This is the placeholder to write actual code. 
      Assert.AreEqual(" SPC Connect ", driver.Title); 
     } 
     [TestMethod] 
     public void LogIn() 
     { 
      Assert.IsTrue((driver.FindElement(By.XPath("//input[@class='btn btn-info']")).Text).Contains("Login")); 
      IWebElement username = driver.FindElement(By.XPath("//input[@id='MainContent_txtUsername']")); 
      username.SendKeys(userAccount); 
      IWebElement password = driver.FindElement(By.XPath("//input[@id='MainContent_txtPassword']")); 
      password.SendKeys(userPassword); 
      IWebElement clickSubmit = driver.FindElement(By.XPath("//input[@class='btn btn-info']")); 
       clickSubmit.Click(); 

     } 
     [TestMethod] 
     public void LogInSuccess() 
     { 
      Assert.IsTrue((driver.FindElement(By.XPath("//input[@id='MainContent_btnChangeCompanyPassword']")).Text).Contains("Change Company Password")); 

     } 

ответ

1

Да, эти элементы все еще существуют в обезглавленный браузере. Если вы настроите его правильно, вам не нужно будет менять свои тесты. Вот пример (я использую PhantomJS вместо SimpleBrowser, проводка все до его StructureMap - но принципы должны быть более или менее то же самое):

For<IWebDriver>().Use(() => 
{ 
    var options = new PhantomJSOptions(); 
    options.AddAdditionalCapability("javascriptEnabled", true); 
    options.AddAdditionalCapability("unexpectedAlertBehaviour", "accept"); 
    options.AddAdditionalCapability("handlesAlerts", true); 
    options.AddAdditionalCapability("databaseEnabled", true); 
    options.AddAdditionalCapability("applicationCacheEnabled", true); 
    options.AddAdditionalCapability("locationContextEnabled", true); 
    options.AddAdditionalCapability("webStorageEnabled", true); 
    options.AddAdditionalCapability("acceptsSslCerts", true); 
    options.AddAdditionalCapability("browserConnectionEnabled", true); 
    return new PhantomJSDriver(options); 
});