Перейти к содержимому

Тестирование REST API
онлайн, начало 26 августа
Автоматизация функционального тестирования
онлайн, начало 30 августа
Азбука IT
онлайн, начало 28 августа
Python для начинающих
онлайн, начало 29 августа
Фотография

Некорректная работа Selenium и C#

c# selenium firefox

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 5

#1 alignat

alignat

    Новый участник

  • Members
  • Pip
  • 3 сообщений

Отправлено 04 Март 2017 - 23:46

Возникла следующая проблема (используется Firefox 51, Selenium IDE 2.9, Visual Studio 2015)
 
Записал простой тест: логин и логаут на сайте.
Если запуск производится в Selenium IDE, то все ОК.
 
Запускаю через Visual Studio. Ошибка
 
Result StackTrace:
в OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
   в OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   в OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(String mechanism, String value)
   в OpenQA.Selenium.Remote.RemoteWebDriver.FindElementByLinkText(String linkText)
   в OpenQA.Selenium.By.<>c__DisplayClass6.<LinkText>b__4(ISearchContext context)
   в OpenQA.Selenium.By.FindElement(ISearchContext context)
   в OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(By by)
   в SeleniumTests.Untitled.TheUntitledTest() в C:\Users\Александр\Source\Repos\first_testing\adressbook-web-tests\adressbook-web-tests\UnitTest3.cs:строка 55
Result Message: OpenQA.Selenium.NoSuchElementException : Unable to locate element: Выход
 
Если пройти в режиме отладки пошагово, то все ОК. Тест зеленый.
Никак не могу понять почему элемент по шагам находится, а при полном прогоне нет.
 
Ниже код теста
 
P.S. Если вопрос обсуждался уже, то подскажите где посмотреть. Поиском не нашел.
 
 
using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Support.UI;
 
namespace SeleniumTests
{
    [TestFixture]
    public class Untitled
    {
        private IWebDriver driver;
        private StringBuilder verificationErrors;
        private string baseURL;
        private bool acceptNextAlert = true;
 
        [SetUp]
        public void SetupTest()
        {
            driver = new FirefoxDriver();
            baseURL = "http://software-testing.ru/";
            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 TheUntitledTest()
        {
            driver.Navigate().GoToUrl(baseURL + "/forum/");
            driver.FindElement(By.Id("sign_in")).Click();
            driver.FindElement(By.Id("ips_username")).Click();
            driver.FindElement(By.Id("ips_username")).Clear();
            driver.FindElement(By.Id("ips_username")).SendKeys("*****");
            driver.FindElement(By.Id("ips_password")).Click();
            driver.FindElement(By.Id("ips_password")).Clear();
            driver.FindElement(By.Id("ips_password")).SendKeys("*****");
            driver.FindElement(By.Id("inline_remember")).Click();
            driver.FindElement(By.CssSelector("input.ipsButton")).Click();
            driver.FindElement(By.LinkText("Выход")).Click();
        }
        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;
            }
        }
    }
}
 

  • 0

#2 Freiman

Freiman

    Гуру

  • Members
  • PipPipPipPipPipPip
  • 1 418 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 05 Март 2017 - 07:47

Самый очевидный вариант - при полном прогоне элемент не успевает подгрузиться.
Добавьте в SetUp
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));

  • 0

#3 alignat

alignat

    Новый участник

  • Members
  • Pip
  • 3 сообщений

Отправлено 05 Март 2017 - 09:37

Самый очевидный вариант - при полном прогоне элемент не успевает подгрузиться.
Добавьте в SetUp

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));

Добавил.

[SetUp]
        public void SetupTest()
        {
            driver = new FirefoxDriver();
            driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
            baseURL = "http://software-testing.ru/";
            verificationErrors = new StringBuilder();
        }

Ошибку выдает:

 

System.InvalidOperationException was unhandled by user code
  HResult=-2146233079
  Message=Missing 'type' parameter (IndexOutOfBounds)
  Source=WebDriver
  StackTrace:
       в OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
       в OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
       в OpenQA.Selenium.Remote.RemoteTimeouts.ExecuteSetTimeout(String timeoutType, TimeSpan timeToWait)
       в OpenQA.Selenium.Remote.RemoteTimeouts.ImplicitlyWait(TimeSpan timeToWait)
       в SeleniumTests.Untitled.SetupTest() в C:\Users\Александр\Source\Repos\first_testing\adressbook-web-tests\adressbook-web-tests\UnitTest3.cs:строка 24
  InnerException: 
 
И кроме того, говорит, что метод TimeSpan устаревший

  • 0

#4 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 792 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 05 Март 2017 - 14:33

Для начала в качестве отладки можно поставить между строками:

driver.FindElement(By.CssSelector("input.ipsButton")).Click();
Thread.Sleep(5000); //кол-во миллисекунд паузы
driver.FindElement(By.LinkText("Выход")).Click();

Если тест пройдет, значит элемент не успевает загрузиться и дальше уже допиливать тест. Разумеется в пошаговом режиме скорость выполнения теста ниже.

Насколько я помню, когда я писал тесты на C# я добавлял свои команды ClickAndWait (когда происходит обновление страницы) и поиска элементов, так как стандартные часто "сбоили".


  • 0

http://starbugss.blogspot.ru - "Звездные баги", мой блог.


#5 alignat

alignat

    Новый участник

  • Members
  • Pip
  • 3 сообщений

Отправлено 05 Март 2017 - 19:40

Спасибо!

Совет Snap сработал.


  • 0

#6 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 792 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 06 Март 2017 - 09:45

Спасибо!

Совет Snap сработал.

Если вы про совет с паузой, то рассматривать его как выход из положения не совсем верно. Более правильно в последствии либо настроить 

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));

либо вместо команды FindElement использовать свою команду, которая будет искать некоторое время элемент и, например, возвращать false, если ничего не найдено.


  • 0

http://starbugss.blogspot.ru - "Звездные баги", мой блог.



Selenium 2.0: стартовый уровень
онлайн
Программирование на Java для тестировщиков
онлайн
Автоматизация функционального тестирования
онлайн
Selenium WebDriver: полное руководство
онлайн




Темы с аналогичным тегами c#, selenium, firefox

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных

Яндекс.Метрика
Реклама на портале