Добрый день. Пытаюсь сделать параметризированные тесты на Webdriver 3 / JUnit4, пока локально в Idea. Начинаю с простого, обход по ссылкам, которые предварительно собраны в виде URL в простой список. Этот список я не могу использовать в качестве параметра. Насколько я понимаю, параметрами могут выступать только объекты.
Например я могу объявить объект заранее
Object[] testvalues = new Object[]{"google.com","ya.ru","twitter.com"};
И тогда в тесте он отработает правильно
@RunWith(Parameterized.class)
public class TestParam {
@Parameterized.Parameter
public String domainName;
@Parameterized.Parameters(name = "{index}:TestOf {0}")
public static Object[] data() {
return testvalues;
}
@Test
public void paramTest() {
System.out.println(domainName);
}
}
Фокусы начинаются когда я пытаюсь использовать список ссылок.
1. Я могу сделать объект через toArray()
2. Я могу сделать объект через stream().toArray(n -> new String[n])
3. Я могу сделать объект через stream().toArray(String[]::new)
4. Я не могу добавлять ссылки сразу в объект, потому что он имеет фиксированный размер
В результате, если я использую именно сконвертированный объект, то тестовый класс выполняется успешно без параметров, ничего не делая. Я проверял, что на выходе получаются именно объекты с нужным содержимым. Подскажите пожалуйста, где у меня ошибка.
Желаем вам найти сотни важных багов и не дать им проскользнуть в релиз, изучить новые технологии и инструменты, покорить сложнейшие проекты и стать образцом для подражания!
Начинающие тестировщики – желаем успешно найти отличную работу и быстро стать мастерами своего дела!
Тест-аналитики – пусть документация будет внятной, а заказчики – отзывчивыми!
Автоматизаторы – чистого вам кода и надежного инструментария!
Тест-менеджеры – пусть ваша команда всегда работает, как часы!
С наступающим Новым Годом и Рождеством, наше любимое сообщество! Есть ли у вас профессиональные планы и цели на Новый Год? Поделитесь на форуме, и все новогодние обещания обязательно исполнятся!
Мы подготовили для вас вредные советы – постарайтесь не следовать им в наступающем году, и тогда все ваши профессиональные мечты обязательно сбудутся!
Давно хотел создать метод generic типа, так сказать освоить работу с дженериками. Использую Selenide.
В итоге, написал метод, открывающий страницу в новой вкладке и возвращающий объект этой страницы
@Step("Открываем новую страницу по ссылке {0} и возвращаем объект страницы {1}")
public static <T extends PageBase> T openPageInNewTab(String url, Class<T> page) {
Selenide.executeJavaScript("window.open('"+url+"','_blank');");
switchTo().window(getWebDriver().getWindowHandles().size()-1);
new WebDriverWait(getWebDriver(), 20)
.until(webDriver -> ((JavascriptExecutor) webDriver).executeScript("return document.readyState").equals("complete"));
sleep(5000);//без этого слипа поля нового объекта page будут null
try {
return page.newInstance();
} catch (InstantiationException | IllegalAccessException ex) {
throw new RuntimeException("Не получилось создать объект страницы " + page.getSimpleName());
}
}
Проблема моя заключается в том, что без sleep(5000), все поля возвращаемого объекта page будут null. Хотелось бы избавиться от слипа. Гуглил, и находил на этом форуме такой конструктор класса, для инициализации элементов страницы
public SkillServicePage(WebDriver driver){
PageFactory.initElements(driver, this);
this.driver = driver;
}
Вопрос теперь: как вызвать этот конструктор в моём методе ? или есть другой способ инициализации элементов загруженной страницы ? Спасибо
Что бы вы, как тестировщик, попросили у Деда Мороза?
(вот я например)
Дорогой Дедушка Мороз,
пожалуйста, сделай так, чтобы я больше никогда не видела экспектов, запрятанных в методы страниц; объявления элементов через локаторы каждый раз заново в каждом тесте (или каждом методе); удаленных втихушку багов ("Мы решили, что не будем это фиксить" - "А почему?" - "Ммм да фиг знает, сто лет прошло, уже и не помню").
А еще, если можно, чтобы браузер Safari взял да исчез бесследно.