放在单独的测试中时代码不执行 类

Code not executing when placed in separate test classes

我正在为一个使用 maven+TestNG 的网站编写一个 PageFactory 框架, 我有页面明智 PageObject classes,其中存在特定于页面的所有 Web 元素和操作,如 LoginPageObjectAccountSelectionPageObject...
我有一个 class "Base",其中存在 WebDriver、Logger 等常见元素。 我有一个 class "BasePage",其中包含单击、滚动、select、刷新...等常见操作

MyTestng.xml 对所有单独的页面都有单独的 <class> 条目。 只是我在 @BeforeSuiit 中初始化浏览器对象,在 class 中初始化浏览器对象 class 它正在我的测试 classes 中扩展 下面是我为我的项目提出的 flow/arch。 问题:

我的每个测试 classes 中都有多个 @Test。 当我的测试 classes 被单独执行时,所有的 @Test 脚本都执行了, 但是当我连续执行它们时,即我的 testng 文件对我所有的测试 classes 都有单独的条目,我的执行失败了。错误说无法在页面上找到元素,我有等待语句,但仍然无法正常工作。

我试过调试代码,但无法找到原因,因为流程在第二页开始时停止,异常提示找不到元素

代码:

@FindBy(id="listAccounts")
WebElement accountDropdown;

public void selectAccount(){
    logger.info("Selecting Account");
    implicitwait(10);

    Select dropdown = new Select(accountDropdown);
    logger.info("Drop down is multiple::"+ dropdown.isMultiple());
}

预计:
即使分开代码页,代码也应该完全执行。

实际:
当我在一个测试 class 中包含所有页面代码时,代码已执行。 但是,当我将它们分别放在页面测试 class 中时,抛出了找不到元素的异常。

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"id","selector":"listAccounts"}

在使用PageFactory框架的POM中,应该在PageClasses的Constructor中初始化PageFactory。请在下面找到可能适用于您的情况的代码片段。

public class LoginPage extends TestBase {

public LoginPage() {
    PageFactory.initElements(driver, this);//Here driver is initialised in TestBase class and inherited in LoginPage class
}
//your code

@FindBy(id="listAccounts")
WebElement accountDropdown;

public void selectAccount(){
logger.info("Selecting Account");
implicitwait(10);
Select dropdown = new Select(accountDropdown);
logger.info("Drop down is multiple::"+ dropdown.isMultiple());
}
}

克里希纳答案的补充:

PageFactory.initElements(driver, this); 

上面的代码可以移到基础 class 和 LoginPage 中,您只需像这样在构造函数上传递 webdriver。

public class LoginPage extends Base {

public LoginPage(Webdriver driver) {
    super(driver);
}
...
public class Base {

public Base(Webdriver driver) {
    PageFactory.initElements(driver, this);
}
...