Хорошо, так что проблема ниже - это то, что я пытался решить, пока не увидел, что ошибка была не в моем коде, а в Test CLASS.Не удаляя вопрос, потому что это может помочь кому-то, если они столкнутся с такой же проблемой.
Убедитесь, что ваши тесты (в данном случае использовали TestNG) написаны в хронологическом порядке или их порядок должен быть правильно определен.
Итак, после примечания выше было то, с чем я столкнулся:
Мой код не может найти веб-элементы, когда Selenium Page Factory инициализирует WebElements, которыйобъявлено в Базовом классе моей платформы.
Ссылка на элемент верна, и код работает нормально с обычным
FindElement(By.cssSelector("locator"))
Хорошо, эта проблема может выглядеть повторяющейся, но никакие ответы на другие вопросы не могут помочь мне,Я пробовал неявные / явные ожидания;Я пытался разместить все в одном классе, используя PageFactory, но, похоже, ничего не работает.
Я создал простую среду TestNG для простого "Поиска в Google", где класс GoogleSearchAction расширяет "BaseClass" в последних элементах.инициализируется с помощью Page Factory.Ниже приведен код для базового класса:
/*Base Class:*/
public class BaseActions {
WebDriver driver;
public BaseActions(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
public void launchApplication(String baseUrl) {
System.out.println("URL:" + baseUrl);
driver.get(baseUrl);
}
public void end_All_The_Browser_session() {
driver.quit();
}
}
Теперь ниже приведен класс вспомогательных действий
public class Test_Google_Search_Action extends BaseActions {
@FindBy(css = "input[name='q']")
private WebElement inputBox_TextField;
public Test_Google_Search_Action(WebDriver driver) {
super(driver);
}
public void Navigate_search_Page() throws FileNotFoundException,
InterruptedException {
inputBox_TextField.sendKeys(yamlReader.getValue("seacrhText_1"));
inputBox_TextField.sendKeys(Keys.ENTER);
}
}
. Далее следует StackTrace:
org.openqa.selenium.NoSuchElementException: no such element: Unable to
locate element: {"method":"css selector","selector":"input[name='q']"}
(Session info: chrome=73.0.3683.86)
*** Element info: {Using=css selector, value=input[name='q']}
ПростоПовторение: локатор правильный, и код работает нормально. Если не использовать Page Factory.
Я почти уверен, что это глупая ошибка. Я просто не могу ее точно определить.
Любая помощь будетвысоко ценится.