Jenkins и Selenium тесты

Всем доброго времени суток!
В автоматизированном тестировании я новичок, поэтому прошу помощи в решении следующей проблемы:
Есть тест сьют с большим количеством тестов(связка jUnit - Selenuim) При запуске их через браузер все отлично, все проходят, но когда собираем их на Jenkins большинство падает и выдает ошибки типа Unable to locate element.
Подскажите, в чем может быть проблема?
Спасибо!

побольше информации об окружении напишите.

если часть проходит, а часть падает, то проблема запросто может быть в более медленной работе того окружения, в котором тесты запускаются через Jenkins, по сравнению с тем, на котором всё успешно работало.

Попробуйте для одного теста, который стабильно падает в рабочем окружении, в качестве эксперимента сделать дополнительные wait-ы для элементов перед обращением к ним.

@streLer Изначально, тесты запускались через браузер IE, при сборкеJenkins использовала RemoteWebDriver,в качестве BrowserName использовалась Mozilla версии 24.0, Platform - Linux.

@joemast Wait-ы перед элементами делала не помогает.Интересно, что каждый раз падают определенные тесты.

Допилите тесты под FF. Если вы разрабатывали их под IE, они под FF не гарантированно заработают.

@joemast Я не совсем понимаю что значит допилите под FF и зачем?
Тесты запускались и под мозилой, просто я использовала браузер IE по принципу,если там заработает, то на остальных тоже!

Если я вас правильно понял, вы используете Grid, машина на которой стоит IE , какая версия браузера? необходимо подобрать нормально работающий IEdriver. Самый нормальный IEDriverServer 2.32.3.0

Я использую Grid, но не IE, а Mozilla версии 24.0, и использую RemoteWebDriver.
Просто про IE я использовала при тестировании через браузер и таким образом имела ввиду, что тесты работают…но при сборке на jenkins некоторые валятся.

Тогда напишите пример хотя бы одно локатора, который он не находит, вы по xpath ищите? попробуйте через css . и приведите пример кода , где инициализируется FF драйвер, профиль используете?

в том-то и дело, что это не так. Верстка тестируемого приложения может различаться под разными браузерами. WebDriver под разные браузеры использует разный XPath-движок (что критично, если вы xpath-локаторы используете)

И ещё, под линухом рекомендуют FF версии 20 использовать на данный момент. Дело в том, что FirefoxWebDriver не успевает за последними версиями мозиллы, поэтому в самых последних что-то может работать не так как ожидается. Лучше использовать версию чуть постарше

@streLer не видит элементы, например: id = “search”, а так же xpath: .//*[@class=‘search-button hidden’], вот как я все это делаю с удаленным драйвером:
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setBrowserName(“firefox”);
capabilities.setPlatform(Platform.LINUX);
capabilities.setVersion(“20.0”);
driver = new RemoteWebDriver(new URL(""), capabilities);

@joemast спасибо за совет по поводу версии, поменяла, но,к сожалению, результата нет.
С мозилой пробовала, все проходит. Проблема, как мне кажется именно в удаленном драйвере, который не видит элементов.Но как ее решить, пока не придумала

нашла источник проблемы: действительно мозиловский драйвер прогоняет тесты намного быстрее, и он просто не успевает увидеть элементы.Но теперь не знаю, как это исправить, так как просто wait-ы не помогают!

Точка перед // не нужна. и попробуйте сделать ожидание перед нажатием , например так :
WebDriverWait waitTool= new WebDriverWait(driver, 10);
waitTool.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=seatch’]")));

p.s. и почему вы обращаетесь к скрытому классу? //*[@class=‘search-button hidden’]

@streLer у меня есть кнопка search, я должна ее найти, кликнуть по ней, после этого появляется строка, в которую я вписываю название того, что я ищу.(скрытый класс - это и есть эта кнопка, просто так называется), вообще xpath такой: .//[@id=‘header’]/div/a[2], но к xml: , поэтому что бы он не был трехэтажным я заменила на //[@class=‘search-button hidden’]

wait-ы попробовала, но не получается: он проходит кнопку (в браузере не нажимает ее, но проходит) и не видит всплывающего окна, а поэтому падает.

попробуйте всё-таки другие xpath-выражения. Возможно, что проблема и не в wait-ах. Например, для кнопки может подойти что-то типа //button[@id=‘search-button’], или @name, если id не задан, либо ещё как-то. Искать xpath по свойству @class не очень хорошая идея изначально, а уж по такому выражению как у вас и вовсе найдется скрытая кнопка, в которую WebDriver не сможет кликнуть.

Напишите сюда html вокруг вашей кнопки, вам подскажут как её найти.

А ещё интересно с каким Exception падают тесты - это тоже может подсказать путь к решению. Посмотрите все ли они одинаковые, возможно проблема не одна, а несколько. Решайте их по-очереди

а так же выводит StaleElementReferenceException: Element not found in the cache - perhaps the page has changed since it was looked up

ElementNotVisibleException возникает, когда вы пытаетесь взаимодействовать с существующим в DOM, но невидимым пользователю элементом. Это как раз та кнопка класса hidden. Поменяйте xpath и у вас заработает.

StaleElementReferenceException возникает, когда вы сначала нашли элемент, потом страница обновилась (ajax-ом), и после этого вы пытаетесь обратиться к старому элементу. Для человека страница выглядит (возможно) без изменений, а структура элементов страницы поменялась. Надо заново делать findElement после обновления страницы

@joemast

StaleElementReferenceException возникает, когда вы сначала нашли
элемент, потом страница обновилась (ajax-ом), и после этого вы
пытаетесь обратиться к старому элементу. Для человека страница
выглядит (возможно) без изменений, а структура элементов страницы
поменялась. Надо заново делать findElement после обновления страницы

Я просто не понимаю, где моя страница обновляется с помощью ajax. Я нажимаю кнопку, перехожу на след страницу,на ней кнопка, которая нам нужна.

 NewPartnership newPartnership = partnershipsPage1.clickAddPartnership();
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        assertTrue(newPartnership.ifDisplayed(By.xpath("//*[@id='navigation']/div/div[2]/a[1]/i")));
        driver.findElement(By.xpath(".//*[@id='navigation']/div/div[2]/a[1]/i"));
        PartnershipsPage partnershipsPage = newPartnership.clickSave();

перешли по ссылке, зашли на страницу, нажали Save

Не видя полностью кода, сложно ответить на ваш вопрос. Посмотрите внимательно exception stacktrace, найдите в какой строке в вашем коде он происходит. От неё и раскручивайте