Возможно ли работать с @FindBy используя selenide?

page-factory
java
selenide
webdriver
Теги: #<Tag:0x00007fedbc245228> #<Tag:0x00007fedbc245048> #<Tag:0x00007fedbc244e68> #<Tag:0x00007fedbc244cb0>

(Демид) #1

Не могу понять как создать драйвер через selenide

В селениуме это выглядит вот так -

public void init(final WebDriver driver) {
    PageFactory.initElements(driver, this);
}

Но я не использую WebDriver


(Fiodar Motin) #2

Не советую пихать PageFactory и @FindBy в selenide.

Пробуйте так

  public WebDriver driver;

    @BeforeClass
    public void setUp() {
    System.setProperty("webdriver.chrome.driver", "src/main/resources/drivers/windows/chromedriver.exe");
    Configuration.browser = "chrome";

}

Место @FindBy используйте

SelenideElement btnSignIn = $(By.xpath("//*[@class='top-bar']//*[text()='Sign up']")),

(asolntsev) #3

Тем Селенид и хорош, что многие вещи делает ненужными. В частности, вам больше не нужно вызывать PageFactory. Вот же есть пример на гитхабе:


(Демид) #4

Я не собираюсь его туда “пихать” если это делать необязательно.

Мой класс с тестами выглядит так
image
Я хочу что бы объекты этих классов существовали только в момент вызова их методов, и я думал FindBy поможет мне в этом.

К сожалению вариант…

SelenideElement btnSignIn = $(By.xpath("//[@class=‘top-bar’]//[text()=‘Sign up’]")),

…не подходит, так как при создании объекта страницы в классе с тестами, селенайд этой строчкой пытается найти объект что-бы присвоить переменной, но объекта может и не существовать на текущей веб-странице


(Дмитрий Еремин) #5

Вы уверены? Попробуйте, все же, такой подход
Насколько я знаю, код выше не инициализирует элемент, а только запоминает локатор
Инициализация будет при первом взаимодействии с элементом
Например,

SelenideElement btnSignIn = $(By.xpath("// [@class=‘top-bar’]// [text()=‘Sign up’]")); //просто знаем, как искать элемент
btnSignIn.click(); //вот только здесь будет искать элемент и кликать

(Алексей Чикпик) #6

На сколько я помню, Selenide хоть при объявлении через $ хоть через @FindBy садит ленивую проксю, а при обращении к объекту ищет его уже.


(Демид) #7

Всё таки помогло! Спасибо всем