Jenkins: NUnit тесты написанные на C# из VS запускаются нормально в Jenkins падают

selenium
testng
webdriver
Теги: #<Tag:0x00007f7b621279f8> #<Tag:0x00007f7b621277c8> #<Tag:0x00007f7b62127390>

(Irina Nikolskaya) #1

Тесты в Jenkins падают в некоторых местах с диагностикой - Element is not currently visible and so may not be interacted with

Этот же тест запущенный из VS работает нормально

Вставила условие для проверки появления объекта

for (int second = 0; ; second++)
            {
                if (second >= 60) Assert.Fail("timeout");
                try
                {
                    if ("Delete" == driver.FindElement(By.Id("*****************Program")).Text) break;
                }
                catch (Exception)
                { }
                Thread.Sleep(1000);
            }

локально это место проходит нормально, если запускаю тест из Jenkins то падает тест по таймаут

подскажите как решить проблему


(Yaroslav Pernerovskyy) #2

Вам сюда: http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp


(Irina Nikolskaya) #3

Код который не работает в Дженкинсе выглядит вот так:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));

IWebElement test = driver.FindElement(By.Id("*******************************************"));
test.Click();

test = driver.FindElement(By.Id("************************************"));
test.SendKeys("**********_Program");

вот эта строка не определяется в Дженкинсе, при запуске из студии все работает нормально
driver.FindElement(By.Id("********************************************Program")).Click();


(Yaroslav Pernerovskyy) #4

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));

вот эта строчка это ок, но этот вейт нигде не используется…

хотя бы так (как в примере по линке выше)

    IWebDriver driver = new FirefoxDriver();
    driver.Url = "http://somedomain/url_that_delays_loading";
    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
    IWebElement myDynamicElement = wait.Until<IWebElement>((d) =>
        {
            return d.FindElement(By.Id("someDynamicElement"));
        });

(Irina Nikolskaya) #5

Попробовала с вашим примером, итог не изменился:(
из студии тест проходит и объект находит из Дженкинса не находит объект

Сообщение об ошибке

Test method RegressTesting.InvestorSRP_Matrices.Investor_SRP_Matrices threw exception: 
OpenQA.Selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with

Стек вызовов

at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.Remote.RemoteWebElement.Click()
   at RegressTesting.Class.Class_M************(IWebDriver driver) in c:\Work\C#Tests\RegressTesting\RegressTesting\Class\Class_M*******.cs:line 552
   at RegressTesting.I**********_M*******.I******************() in c:\Work\C#Tests\RegressTesting\RegressTesting\I*********_M*****.cs:line 109

(Irina Nikolskaya) #6

Может это какой-то баг в самом Дженкинсе?
Я обновила все что можно было обновить в Дженкинсе


(5am) #7

скорее всего схожая проблема
http://automated-testing.info/t/test-padaet-pri-progone-na-timsiti-elementnotvisibleexception-a-lokalno-na-mashine-prohodit-normalno

с помощью C# / JS / Скрина - получите разрешение экрана/окна браузера и посмотрите


(Irina Nikolskaya) #8

Сейчас изучу ресурс и попробую, Спасибо:)


(Irina Nikolskaya) #9

Нет это не совсем та проблема:(
У меня в обоих случаях тесты запускаются на локальной машине, тесты из студии я запускаю локально и Дженкинс тоже стоит локально, тест достаточно большой длительностью примерно 1 мин, и из всего теста не работает это место. Т.е. другие тесты у меня работают и этот тест работает но до определенного места


#10

Пробовали в момент таймаута записать в лог или в файл driver.PageSource и посмотреть, есть ли там реально этот элемент?


(Irina Nikolskaya) #11

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

В итоге заработало само после того как я установила обновления для Windows, я так и не поняла что это было и почему не работало…