确保维护测试用例年表> Selenium页面工厂>元素初始化导致POM模型下的“没有这样的元素异常”

问题描述 投票:0回答:1

好吧,所以下面的问题是我试图解决的问题,直到我发现故障不在我的代码中但在Test CLASS中。不删除问题,因为它可能会帮助某人,如果他们遇到相同的问题。

确保您的测试用例(在这种情况下使用的TestNG)按时间顺序编写,或者应该正确定义它们的顺序。

所以在上面的注释后面是我面对的:

当Selenium Page Factory初始化在我的Framework的基类中声明的WebElements时,我的代码无法找到Web元素。

元素引用是正确的,代码可以正常工作

 FindElement(By.cssSelector("locator")) 

好吧,这个问题可能看起来很重复,但其他问题没有答案可以帮助我。我尝试过隐式/显式等待;我尝试使用PageFactory在单个类中容纳所有内容,但似乎没有任何工作。

我为简单的“Google搜索”创建了一个简单的TestNG框架,其中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();
       }

}

现在以下是Sub Action Class

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。

我很确定这是一个愚蠢的错误,我无法指出它。

任何帮助将受到高度赞赏。

java selenium pageobjects page-factory
1个回答
0
投票

从BaseActions中删除PageFactory init并将其放在Test_Google_Search_Action的构造函数中。

© www.soinside.com 2019 - 2024. All rights reserved.