Обязательно сохраняйте контрольные примеры Chronology> Selenium Page Factory> Инициализация элемента приводит к «Нет такого исключения элемента» в модели POM - PullRequest
0 голосов
/ 29 марта 2019

Хорошо, так что проблема ниже - это то, что я пытался решить, пока не увидел, что ошибка была не в моем коде, а в 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.

Я почти уверен, что это глупая ошибка. Я просто не могу ее точно определить.

Любая помощь будетвысоко ценится.

1 Ответ

0 голосов
/ 29 марта 2019

Удалите инициацию PageFactory из BaseActions и поместите ее в конструктор Test_Google_Search_Action.

...