PageFactory инициализация несуществующего элемента не возвращает exception

Доброго времени.
Столкнулся с такой проблемой:
Объявляю форму
@FindBy(xpath = "//*[@name='registerform']") WebElement registrationForm;
и заведомо несуществующий вебэлемент
@FindBy(xpath = ".//*[@name='email2']") WebElement emailInput;
Дальше конструктор и шаги
public RegistrationSteps(WebDriver driver){ this.driver = driver; PageFactory.initElements(driver, this); } @Step public void openRegistrationPage() { driver.get("<site_address>"); wait = new WebDriverWait(driver, 5); wait.until(ExpectedConditions.visibilityOf(registrationForm)); } @Step public void enterData(String email) { emailInput.sendKeys(email); }
Тест выполняется в облаге sauselab или на seleniumServer локально.

В облаке тест успешно не находит элемент и выбрасывает exception
NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":".//*[@name='email2']"}

В то время как локально - открывается страница, драйвер ждет элемент и тест завершается без каких либо результатов не закрывая браузер.
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

В логе сервера
Caused by: org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":".//*[@name='email2']"}
WARN - Exception: Unable to locate element: {"method":"xpath","selector":".//*[@name='email2']"}
Исключение есть.

В отчете с sauselab отражены верные результаты (нет элемента). В локальном - тест пройден успешно.

Возможно кто то сталкивался с подобным?

Весьма похоже на ошибку конфигурации. Что-то банально забыли перенастроить, переключаясь с облака на локальный билд. Показывайте сорсы, посмотрим.

1 лайк

Спасибо за ответ.

Вот весь проект

Что-то не совсем понял, почему у вас по 2 value в пропертях:

                    <systemProperties>
                        <property>
                            <name>instance</name>
                            <value>local</value>
                            <value>${instance}</value>
                        </property>
                        <property>
                            <name>instanceDevice</name>
                            <value>desktop</value>
                            <value>${instanceDevice}</value>
                        </property>
                        <property>
                            <name>instanceBrowser</name>
                            <value>firefox</value>
                            <value>${instanceBrowser}</value>
                        </property>
                    </systemProperties>

Не говоря уже о том, что данный синтаксис является deprecated.

Еще бы рекомендовал привести в порядок ваш хэлпер. В таком коде легко запутаться.

По Вашим рекомендациям начал чистить код и выяснил, что всему виной оказалась имплементация SauceOnDemandSessionIdProvider

Осталось понять в чем именно причина.

Спасибо:blush:

UPD. Да, проблема оказалась имено в имплементации классов Sause Labs. Без них все отлично стартует.

2 лайка