好的,所以下面的问题是我试图解决的问题,直到我发现错误不在我的代码中,而是在测试类中。不删除问题,因为如果他们遇到相同的问题,它可能会对某人有所帮助。
确保您的测试用例(在这种情况下使用 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']}
只是重述:定位器是正确的并且代码工作正常如果不使用页面工厂。
我很确定这是一个愚蠢的错误,我无法确定它。
任何帮助将不胜感激。