当前位置: 首页 > 知识库问答 >
问题:

页面对象结构中的Pagefactory抛出null

牧熙云
2023-03-14

我正在我的页面对象模型自动化框架中实现pagefactory。我现有的框架在没有pagefactory的情况下运行良好。现在我正在实现pagefactory来调用元素。我面临Pagefactory元素抛出空值的问题。我怀疑这可能是因为施工人员不确定。

我已经建立了一个基于页面对象模型的框架有如下包:-com.automationframeworkcom.configutaioncom.page对象com.testcasescom.testsuites

我的testsuites类调用testcases包中的testcases,并调用automationframework中的驱动程序和其他基于框架的类。我知道仅仅读几篇文章是很难抓住错误的,但可能有人也面临同样的问题,可以帮助我。

我的页面类看起来像下面这样:-

public class SynchronizationPage extends Page {

    ExcelLib xl = new ExcelLib();

    private WebElement element = null;

    public SynchronizationPage(WebDriver driver) {
        super(driver);
    }

    protected boolean isSecured() {
        return true;
    }

    @FindBy(how = How.XPATH, using = "//a[@class='header-font']/span[@class='icon-cog']")
    @CacheLookup
    public WebElement HoverOnSettings;
}

我的测试用例类:-

public class SyncTest extends AutomationTestCaseVerification {

//  SynchronizationPage sync = new SynchronizationPage(Page.driver);
    SignOutPage signout = new SignOutPage(Page.driver);
    ExcelLib xl = new ExcelLib();
    SynchronizationPage synccc = PageFactory.initElements(Page.driver, SynchronizationPage.class);

    private WebElement element = null;
    private WebDriver driver;

    public SyncTest() {
        super();
    }


    @Override
    protected void verifyTestCases() throws Exception {
        syncFeature();
    }

    public void syncFeature() throws Exception {

        try {
         WebDriverWait waits = new WebDriverWait(Page.driver, 60);
    //   waits.until(ExpectedConditions.elementToBeClickable(synccc.clickOnOffButton)).click();
         synccc.clickOnOffButton.click();
         System.out.println("Yes I clicked");
        }
        catch(Exception ex)
        {
            System.out.println("error ="+ex.getMessage());
            }

    }
}

我得到的错误如下:-

JAVAorg上的lang.NullPointerException。openqa。硒。支持pagefactory。DefaultElementLocator。findElement(DefaultElementLocator.java:69)位于org。openqa。硒。支持pagefactory。内部的地点:格勒曼坦德勒。在com上调用(LocatingElementHandler.java:38)。太阳代理$Proxy5。单击com上的(未知源)。复写的副本。自动化测试用例。同步测试。com上的syncFeature(SyncTest.java:130)。复写的副本。自动化测试用例。同步测试。在com上验证testcases(SyncTest.java:60)。复写的副本。自动化自动化框架。自动测试用例验证。在com上执行(AutomationTestCaseVerification.java:58)。复写的副本。自动化测试套件。同步测试。sun上的testSync(SynchronizationTest.java:22)。反映NativeMethodAccessorImpl。在sun上调用0(本机方法)。反映NativeMethodAccessorImpl。在sun上调用(未知源)。反映DelegatingMethodAccessorImpl。在java上调用(未知源)。朗。反思。方法在组织中调用(未知源)。testng。内部的方法调用助手。org上的invokeMethod(MethodInvocationHelper.java:108)。testng。内部的调用者。org上的invokeMethod(Invoker.java:661)。testng。内部的调用者。invokeTestMethod(Invoker.java:869)位于org。testng。内部的调用者。org上的invokeTestMethods(Invoker.java:1193)。testng。内部的TestMethodWorker。org上的invokeTestMethods(TestMethodWorker.java:126)。testng。内部的TestMethodWorker。在org上运行(TestMethodWorker.java:109)。testng。测试者。privateRun(TestRunner.java:744)位于org。testng。测试者。在org上运行(TestRunner.java:602)。testng。SuiteRunner。在org上运行测试(SuiteRunner.java:380)。testng。SuiteRunner。在org上按顺序运行(SuiteRunner.java:375)。testng。SuiteRunner。privateRun(SuiteRunner.java:340)位于org。testng。SuiteRunner。在org上运行(SuiteRunner.java:289)。testng。SuiteRunnerWorker。运行套件(SuiteRunnerWorker.java:52)位于org。testng。SuiteRunnerWorker。在org上运行(SuiteRunnerWorker.java:86)。testng。TestNG。在org上依次运行suitessequential(TestNG.java:1301)。testng。TestNG。在org上本地运行suitesLocal(TestNG.java:1226)。testng。TestNG。org上的runSuites(TestNG.java:1144)。testng。TestNG。在org上运行(TestNG.java:1115)。testng。遥远的抽象远程测试。在org上运行(AbstractRemoteTestNG.java:132)。testng。遥远的远程测试。initAndRun(RemoteTestNG.java:230)位于org。testng。遥远的远程测试。main(RemoteTestNG.java:76)

我也尝试过申请以下职位,但仍然没有成功:-

PageFactory。初始化元素(this.driver,this);

共有1个答案

石喜
2023-03-14

您可以通过调用PageFactory再试一次吗。初始化元素(驱动程序,this) 在SynchronizationPage类的构造函数中。

 类似资料:
  • 更新代码: 页面对象: 页面库: 测试基地: 看起来框架没有考虑等待预期条件-元素的可见性。我怀疑与“visibilityOf(element)”的实现和@FindBy初始化元素的方式有关 异常的堆栈跟踪: 原因:org。openqa。硒。NoSuchElementException:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“/*[@id='container']]/

  • 我想将Nightwatch的页面对象系统用于我们应用程序中使用的UI组件。因为nightwatch有自己的读取/初始化它们的方式,所以我看不到正确扩展/重用它们的方法。 例如,我想要一个“日期字段”的DateInputPageObject。它将识别标签、输入、日期选择器等。 我会在任何带有日期输入字段的页面上使用它。 我还想扩展页面对象。例如,。将为所有模态元素定义选择器-覆盖、容器、关闭按钮等。

  • 问题内容: 我有三节课。一种用于从网页中获取所有元素,一种用于对这些元素执行操作,另一种用于测试脚本。从测试脚本调用函数时,出现空指针异常。我发现这是因为我使用了@FindBy批注,但我不知道如何解决此问题。 元素类: 动作类: 测试脚本: 当我将WebDriver对象从测试脚本传递到元素类时,也不例外。由于没有WebDriver实例化,当我使用通过FindBy注释初始化的元素时,会发生问题。我该

  • 问题内容: 我知道您无法在中初始化对象。我一直在互联网上搜索,但只找到了一个可能的答案,可以使用但在实现方面没有太多细节。我要问他们是成功实施它还是有实现它的想法的人,可以通过以外的其他方式来确定。 目前,我仅使用以下内容: 我正在寻找实现的东西是这样的。 PS。我是selenium的新手,也是回来的Java开发人员,所以请好好对待我:) 问题答案: 由于没有人分享某些东西,因此我将分享我的做法。

  • 我有一个关于selenium WebDriver中页面对象的问题。我们的站点非常动态,有很多ajax和各种身份验证状态。如何定义每个页面对象,但让我们假设我已经弄清楚了,并定义了代表我们站点的几个页面对象。 你如何处理从一页到另一页的交叉?因此,我得到一个页面对象用于我的主页,一个用于我的帐户页面,一个用于我的结果页面。然后我需要编写一个遍历我所有页面的测试来模拟一个用户执行多个动作。

  • 零售商店的正确模式是什么?公司从商店销售产品。 这似乎违反了我对OOP所知的全部知识。通过层次结构向下传递数据的方法--在对象之间复制参数?我错过了什么?