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