Всем здравствуйте!
Столкнулся с тем, что ElementsCollection из Selenide не хочет кликать по элементам из коллекции.
Метод с классическим Selenium отрабатывает все на ура. В чем может быть причина?
Выдает стандартное: java.lang.NullPointerException
@FindBy(className = "checkbox__label") ElementsCollection checkBoxes;
public void choose5and9checkBoxes(){
priceFromSelenide.get(5).click();
priceFromSelenide.get(9).click();
}
// Классика от Selenium:
public void choose5and9checkBoxes( WebDriver driver){
driver.findElements(By.className("checkbox__label")).get(5).click();
driver.findElements(By.className("checkbox__label")).get(9).click();
}
а ты вызываешь PageFactory.initElements(driver, page)?
Когда ты используешь @FindBy вызов этого метода обязателен. Ну или в случае selenide нужно вызывать метод page(class)
class Page{
@FindBy(className = "checkbox__label") ElementsCollection checkBoxes;
public void choose5and9checkBoxes(){
priceFromSelenide.get(5).click();
priceFromSelenide.get(9).click();
}
}
Page page = Selenide.page(Page.class)
А ещё лучше не используй фабрику и ленивую инициализацию. Селенидовские элементы проксирующие, к ним обращение на манипуляцию происзходить при вызоме методов манипуляций или ожиданий.
SenenideElement button = $("#button"); создаст просто прокси элемент в памяти - он не будет искаться в браузере.
И потом для инициализации pageObject’a просто пиши new MyCoolObject(); как к простому объекту, без всяких page(MyCoolObject.class);
Большое спасибо, учту. Подскажите еще пожалуйста, если не трудно, как в Selenide Chrome запустить?
Положил Chromedriver в корень проекта.
Вот такая конструкция пока не помогает(
@BeforeTest
public void beforeTest() {
Configuration.timeout=5000;
System.setProperty("webdriver.chrome.driver", "chromedriver");
}
К сожалению, из командной строки я не запускаю. Я бы хотел увидеть пример кода из теста, если можно.
очень странно, что в инете почти нет информации по этому поводу.
Вот так тоже не работает:
и вроде как подключить его надо в самом начале @BeforeSuite, я себе сделал так, в BaseTest (два метода):
@BeforeSuite(alwaysRun = true)
public void setUp() {
setWebDriver(getDriver());
}
/**
* Returns the webdriver object for that given thread
* @return - WebDriver object
*/
public static WebDriver getDriver() {
return WebDriverRunner.getWebDriver();
}
Не отрицаю) Более того, предполагаю, что у меня руки растут из одного места)))
Однако, от осознания этого легче не становится и Хром не запускается
Можно было бы просто одну строчку менять - и раз, вуаля. А тут такие танцы с бубнами приходится наворачивать.
У тебя окно браузера открывается? Если нет - значит скорее всего путь не правильный.
И лог выложи сюда, что возникает при запуске тестов и инициализации драйвера
И конфигурации для браузера лучше описывать в статическом методе с аннотацией BeforeSuite типа или класс
И кстати, переименуй хотя бы BeforeTest на BeforeMethod. Помню что-то было с этой разницой
Дело в том, что у меня все прекрасно открывается и ничего не крашится. Просто тест сразу запускается и открывается в FireFox. Любые потуги с изменением дефолтных настроек Selenide не приводят к успеху.
У меня есть класс: BaseStep. В нем лежит метод:
public void openYandex() {
Selenide.open("http://www.yandex.ru")
}
Потом вот так:
public class MainSteps extends BaseStep {
YandexMarketPage marketPage = Selenide.page(YandexMarketPage.class);
@Step("Open Yandex ")
public MainSteps openYandexPage(){
super.openYandex();
return this;
}