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

我正在为PageFactory一个使用 maven+TestNG 的网站编写一个框架,我有页面PageObject类,其中存在所有特定于页面的 Web 元素和操作,例如LoginPageObjectAccountSelectionPageObject......
我有一个类“Base”,其中常见元素如 WebDriver、Logger 是展示。我有一个“BasePage”类,其中存在单击、滚动、选择、刷新等常见操作

<class>MyTestng.xml对所有单独的页面都有单独的条目。只是我正在初始化浏览器对象并将@BeforeSuiit其存储/放置在正在我的测试类中扩展的基类中下面是我为我的项目提出的流程/架构。 问题:

http://img2.mukewang.com/6409a2ec0001181a13360545.jpg

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

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

代码:


@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());

}

预期:

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


实际:

当我将所有页面代码都放在一个测试类中时,代码就会执行。但是当我将它们分别放在页面测试类中时,会抛出元素未找到异常。


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


猛跑小猪
浏览 105回答 2
2回答

慕哥6287543

在使用 PageFactory 框架的 POM 中,应该在 PageClasses 的构造函数中初始化 PageFactory。请在下面找到可能适用于您的情况的代码片段。public class LoginPage extends TestBase {public LoginPage() {&nbsp; &nbsp; 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);&nbsp;上面的代码可以移到基类和 LoginPage 中,你只需像这样在构造函数上传递 webdriver。public class LoginPage extends Base {public LoginPage(Webdriver driver) {&nbsp; &nbsp; super(driver);}...public class Base {public Base(Webdriver driver) {&nbsp; &nbsp; PageFactory.initElements(driver, this);}...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java