0

好的,所以下面的问题是我试图解决的问题,直到我发现错误不在我的代码中,而是在测试类中。不删除问题,因为如果他们遇到相同的问题,它可能会对某人有所帮助。

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

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

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

元素引用正确,代码正常工作

 FindElement(By.cssSelector("locator")) 

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

我为简单的“Google 搜索”创建了一个简单的 TestNG 框架,其中 GoogleSearchAction 类正在扩展后面的“BaseClass”元素使用页面工厂进行初始化。下面是基类的代码:

/*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']}

只是重述:定位器是正确的并且代码工作正常如果不使用页面工厂。

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

任何帮助将不胜感激。

4

1 回答 1

0

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

于 2019-03-29T07:53:53.793 回答