Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Автоматизированное тестирование (Selenium + Java )

webdriver
Теги: #<Tag:0x00007f7b62b76148>

#1

Добрий День! Нужен Ваш Совет:
На страничке есть группа новоствей, выгдядит она вот так :::frowning: https://screencloud.net/v/8EAK );
С помощью вот такого xpass( .//[@id=‘news_container’]/ ), я подсчитал количество новостей ( равна 7 допустим), вот скриншот :: ( https://screencloud.net/v/BjOf );
Также я опредилил как каждую новость можно отпарсить :: ( https://screencloud.net/v/9pnt )
Задача в том что бы открывать рамдомна 2 или 3 новости, проверить что они открываются!
::: List (WebElement) NumbersElementsAll = driver.findElements(By.xpath(".//[@id=‘news_container’]/")); - нашол количество новостей
NumbersElementsAll.size();
– Понимаю что нужно сделать цыкл, но какой if или while.
Пробывал вот так , но ни к чему не привело, тест прошол но результата нет.

int i = NumbersElementsAll.size();
while ( i < 2) {
driver.findElement(By.xpath(".//[@id=‘news_container’]/[i]")).click();
}

Подозриваю что я не совсем до конца понимаю, как можнно работать с элементами массива(

Обьясните пожалуйста)))))


(James May) #2

А при переходе в новость открывается новое окно или новость раскрывается на той же страницей?
Если первый вариант, то в цикле, в первой итерации откроется новая страница и соответственно, на второй итерации вылетит NPE.

К тому же в вашем примере, весь слой новости является ссылкой?
Так то вы нажмете на

и ничего не произойдет.

(Владимир Фролов) #3

Если на странице >= 2 новостей, тело цикла никогда не выполнится. А если новостей <2 то - бесконечный цикл, т.к. i у вас не итерируется.

Получить рандомный элемент коллекции можно так:

WebElement randNews = numbersElementsAll.get(new Random().nextInt(numbersElementsAll.size() - 1));

Соответственно дальше внутри randNews искать то, по чему нужно кликать.

Советую начать с самых азов программирования, почитать что такое циклы и чем они отличаются от условных операторов.


#4

Спасибо за совет)


(Maksim Smolyakov) #5

Для примера, как это можно сделать с Selenide.

pom.xml:

<dependency>
    <groupId>com.codeborne</groupId>
    <artifactId>selenide</artifactId>
    <version>2.19</version>
</dependency>

Тест:

import org.openqa.selenium.By;

import static com.codeborne.selenide.Selenide.*;
import static com.codeborne.selenide.Condition.*;
...
@Test
public void newsTest() {
    open("http://www.filmon.com/news");
    int articleCount = $$(By.xpath("//h3[@class='ui-title']")).size();
    for (int index = 0; index < articleCount; index++) {
        String title = $(By.xpath("//h3[@class='ui-title']"), index).text();
        $(By.xpath("//h3[@class='ui-title']"), index).click();
        $(By.className("single-title")).shouldHave(exactText(title));
        back();
    }
}

#6

Спасибо всем!!! Решение по своей теме нашол, не правильно изначально взял xpass(
Можно еще один вопросик на засыпку!

Есть Шаринг на странице ( Google+/ FaceBook / Twitter)::: ( http://screencloud.net/v/1jlq )
На самой странице когда кликаешь открывается новая вкладка. Но когда делаешь это с помощью (Selenium+Java), он открывает новое окно браузера! Мне то нужно новая вкладка. Подскажите плизз как это реализовать?
Зарание Всем огромное спасибо))))


(Александр Таранков) #7

Тему ты назвал “Автоматизированное тестирование (Selenium + Java)”. Следовательно, надо понимать, что ты нашёл ответ по всей этой теме? Или неточно сформулировал вопрос?

Рекомендую почитать FAQ и обратить особое внимание на название темы, оформление кода и форматирование сообщений. Если будешь игнорировать, получишь бан

Не надо все вопросы писать в одной теме, заводи отдельную


(Sergey Korol) #8

Да-да. Автору было отправлено личное сообщение касательно форматирования кода, которое было проигнорировано. В следующий раз тема подобного формата будет с ходу скрыта на сутки, а потом удалена.


#9

Прошу прощение)) Только проверил почту и увидел письмо (
Буду Исправляться:))