t.me/atinfo_chat Telegram группа по автоматизации тестирования

RemoteWebDriver vs PageObject

Здравствуйте! Никак не могу победить одну штукенцию. Имеется тест, который заполняет поля на странице (input-ы, select-ы, checkbox-ы). Тест запускается как на windows (локальная машина), так и на Linux(виртуальная машина). Локально используется FirefoxDriver, для удаленного запуска использую RemoteWebDriver. Локально тест проходит успешно, удаленно - не получается отыскать два элемента, пишет что они невидимы “org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with”
Все элементы находятся на одной странице - факт. Теперь код:
Вот эта страница с полями, которая заполняется:

public class A extends Page {

public A(PageManager pages) {
    super(pages);
}

@FindBy(name = "firstName")
private WebElement firstName;

@FindBy(name = "secondName")
private WebElement secondName;

@FindBy(name = "lastName")
private WebElement lastName;

@FindBy(name = "country")
private WebElement country;

@FindBy(name = "city")
private WebElement city;

@FindBy(name = "phone")
private WebElement phone;

public A setFirstName(String text) {
firstName.clear();
firstName.sendKeys(text);
return this;
}

public A setSecondName(String text) {
secondName.clear();
secondName.sendKeys(text);
return this;
}

public A setLastName(String text) {
lastName.clear();
lastName.sendKeys(text);
return this;
}

public A selectCountry(String text) {
new Select(country).selectByVisibleText(text);
return this;
}

public A setCity(String text) {
city.clear();
city.sendKeys(text);
return this;
}

public A setPhone(String text) {
phone.clear();
phone.sendKeys(text);
return this;
}

Поля city и phone - невидимы.
Эти поля заполняются так:

@Override
public void createUser(User user) {
    pages.adminMainPage.gotoUserPage().gotoAddNewUser()
            .setFirstName(user.getFirstName())
            .setSecondName(user.getSecondName)
            .setLastName(user.getLastName)
            .selectCountry(user.getCountry)
            .setCity(user.getCity)
            .setPhone(user.getPhone)

Класс AdminMainPage выглядит следующим образом:

public class AdminMainPage extends Page {

private PageManager pages;

public AdminMainPage(PageManager pages) {
    super(pages);
    this.pages = pages;
}

@FindBy(linkText = "Пользователи")
private WebElement userLink;

Класс Page

public abstract class Page {

protected WebDriver driver;
protected PageManager pages;

public Page(PageManager pages) {
    this.pages = pages;
    driver = pages.getWebDriver();
}

И наконец PageManager

public class PageManager {

private WebDriver driver;

public A aPage;
public AdminMainPage adminMainPage;

public PageManager(WebDriver driver) {
this.driver = driver;
aPage = (A) initElements(new A(this));
adminMainPage = (AdminMainPage) initElements(new AdminMainPage(this));

protected Page initElements(Page page) {
PageFactory.initElements(new AjaxElementLocatorFactory(driver, 10), page);
return page;
}

public WebDriver getWebDriver() {
    return driver;
}

Гуглив, натыкался на похожие случаи, неверная инициализация элементов страницы, якобы значение драйвера выставлялось в null. Мне непонятно как на одной странице 4 элемента находятся, а остальные два нет.

Руками на удаленной машине проверяли?

Поясните, что значит руками? Вручную открыть браузер, протыкать все, или зайти на виртуалку и выполнить тест? Дело в том, что если второй вариант, т.е из под виртуалки выполнять, то нужно будет использовать FirefoxDriver, а он работает отлично(проверялось на linux + FFDriver). Я подозреваю дело в связке RemoteWebDriver + @FindBy.

Дойти до места фейла скриптов (можно руками, можно через дебаг) и выяснить почему данные контролы невидимые.

[quote=“belikov_as88, post:3, topic:5083”]
Я подозреваю дело в связке RemoteWebDriver + @FindBy.
[/quote]Очень-очень маловероятно. Единственное, что можно проверить - это версии селениума/браузера/джавы на удаленной и локальной машине.

Зашел на виртуалку, с иксами, все корректно отображается, поля видимые, рабочие.

Стартанул hub на локальной машине, под windows, подцепил ноду, используя RemoteWebDriver запустил тест. Тест прошел. Не понимаю почему не проходит под debian. Что такого может быть отличительного?

Паузы пробовал вставлять перед работой с элементом? Для эксперимента попробуй sleep поставить, если заработает, значит дело банально в задержке при работе с удаленным драйвером