Здравствуйте! Никак не могу победить одну штукенцию. Имеется тест, который заполняет поля на странице (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 элемента находятся, а остальные два нет.