好吧,所以下面的问题是我试图解决的问题,直到我发现故障不在我的代码中但在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。
我很确定这是一个愚蠢的错误,我无法指出它。
任何帮助将受到高度赞赏。
从BaseActions中删除PageFactory init并将其放在Test_Google_Search_Action的构造函数中。