通过 Selenium 运行测试用例时出现 java.lang.NullPointerException

2023-11-30

我面临 NullPointerException 的问题。我尽了最大努力,但无法解决这个问题。我正在为我的项目实现 POM 模型(Selenium)。

这一页:

public class VendorsHomePageApp 
{
    WebDriver driver;

    public VendorsHomePageApp(WebDriver driver)
    {
        this.driver=driver;
    }

    @FindBy(how=How.XPATH,using=".//*[@id='navbarCollapse']/ul[1]/li[1]/a")
    WebElement dashboardTab;

    @FindBy(how=How.XPATH,using=".//*[@id='navbarCollapse']/ul[1]/li[2]/a")
    WebElement tendersTab;

    @FindBy(how=How.XPATH,using=".//*[@id='navbarCollapse']/ul[1]/li[3]/a")
    WebElement notificationsTab;

    @FindBy(how=How.XPATH,using=".//*[@id='navbarCollapse']/ul[1]/li[4]/a")
    WebElement profileTab;

    @FindBy(how=How.XPATH,using=".//*[@id='navbarCollapse']/ul[2]/li/a")
    WebElement vendorName;

    @FindBy(how=How.XPATH,using=".//*[@id='navbarCollapse']/ul[2]/li/ul/li[1]/a")
    WebElement vendorHelp;

    @FindBy(how=How.XPATH,using=".//*[@id='navbarCollapse']/ul[2]/li/ul/li[3]/a")
    WebElement vendorSignOut;

    @FindBy(how=How.XPATH,using="html/body/section/div/div/div/div[2]/div/table/tbody/tr[1]/td[1]/a")
    WebElement firstTender;

    @FindBy(how=How.XPATH,using="html/body/section/div/div/div/div[2]/div/table/tbody/tr[2]/td[1]/a")
    WebElement secondTender;

    @FindBy(how=How.XPATH,using="html/body/section/div/div/div/div[2]/div/table/tbody/tr[3]/td[1]/a")
    WebElement thirdTender;

    public void clickOnDashboardTab()
    {
        dashboardTab.click();
    }

    public void clickOnTendersTab()
    {
        tendersTab.click();
    }

    public void clickOnNotificationsTab()
    {
        notificationsTab.click();
    }

    public void clickOnProfileTab()
    {
        profileTab.click();
    }

    public void clickOnFirstTender()
    {
        firstTender.click();
    }
}

测试类:

public class VendorsHomePageTest 
{
    public WebDriver driver;
    @Test
    public void verifyVendorsHomePageTest() throws Exception
    {
        LoginIntoVendors login=PageFactory.initElements(driver, LoginIntoVendors.class);
        login.verifyLoginVendors();

        VendorsHomePageApp vhpapp= PageFactory.initElements(driver, VendorsHomePageApp.class);
        //driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        Thread.sleep(3000);

        vhpapp.clickOnNotificationsTab();
        vhpapp.clickOnProfileTab();
        vhpapp.clickOnTendersTab();
        vhpapp.clickOnDashboardTab();
        vhpapp.clickOnFirstTender();
    }
}

错误日志:

FAILED: verifyVendorsHomePageTest
java.lang.NullPointerException
    at org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:69)
    at org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke(LocatingElementHandler.java:38)
    at com.sun.proxy.$Proxy4.click(Unknown Source)
    at com.digitalmqc.automation.vendorspages.VendorsHomePageApp.clickOnNotificationsTab(VendorsHomePageApp.java:60)
    at com.digitalmqc.automation.vendorstests.VendorsHomePageTest.verifyVendorsHomePageTest(VendorsHomePageTest.java:28)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:643)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
    at org.testng.TestRunner.privateRun(TestRunner.java:782)
    at org.testng.TestRunner.run(TestRunner.java:632)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
    at org.testng.SuiteRunner.run(SuiteRunner.java:268)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
    at org.testng.TestNG.run(TestNG.java:1064)
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:113)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:206)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:177)

Class:

public class LoginIntoVendors 
{
    @Test
    public void verifyLoginVendors() throws Exception
    {
        WebDriver driver= new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("******");

        IntiationPage vendorInit=PageFactory.initElements(driver, IntiationPage.class);

        vendorInit.clickOnLoginButton();

        VendorsLoginAction Loginven=PageFactory.initElements(driver, VendorsLoginAction.class);

        Loginven.vendorlogin("***","***@gmail.com", "****");

        String title = driver.getTitle();
        System.out.println("Title is  :" + title  );
   }
}

有什么帮助吗?


你需要初始化你的WebDriver第一的。正如我所看到的,您正在创建参考WebDriver但未初始化,请尝试如下:-

WebDriver driver = new ChromeDriver(); //or other driver which you want

Note:- 如果你想初始化ChromeDriver你需要下载铬驱动程序并在初始化驱动程序之前将系统属性设置为:-

System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");

所以详细答案如下:-

public class VendorsHomePageTest 

{
    public WebDriver driver;
    @Test
    public void verifyVendorsHomePageTest() throws Exception
    {
        System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
        driver = new ChromeDriver(); //or other driver which you want

        LoginIntoVendors login=PageFactory.initElements(driver, LoginIntoVendors.class);

        login.verifyLoginVendors();

        VendorsHomePageApp vhpapp= PageFactory.initElements(driver, VendorsHomePageApp.class);

        //driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        Thread.sleep(3000);

        vhpapp.clickOnNotificationsTab();

        vhpapp.clickOnProfileTab();

        vhpapp.clickOnTendersTab();

        vhpapp.clickOnDashboardTab();

        vhpapp.clickOnFirstTender();

    }

}

Edited:- 您需要创建单独的类来为您提供WebDriver实例如下:-

public class DriverInit {

    public WebDriver driver;
    private static DriverInit driverInit = null;

    public static DriverInit getInstance() {
        if (driverInit == null) {
            driverInit = new DriverInit();
        }
        return driverInit;
    }

    private DriverInit() {
        this.driver = new FirefoxDriver();
        this.driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        this.driver.get("******");
    }

    public WebDriver getDriver() {
        return this.driver;
    }

现在你可以调用它了LoginIntoVendors如下 :-

public class LoginIntoVendors 
{
    @Test
       public void verifyLoginVendors() throws Exception
       {
           WebDriver driver = DriverInit.getInstance().getDriver();

           IntiationPage vendorInit=PageFactory.initElements(driver, IntiationPage.class);

           vendorInit.clickOnLoginButton();

           VendorsLoginAction Loginven=PageFactory.initElements(driver, VendorsLoginAction.class);

           Loginven.vendorlogin("***","***@gmail.com", "****");

           String title = driver.getTitle();
           System.out.println("Title is  :" + title  );


       }
}

并在VendorsHomePageTest如下 :-

public class VendorsHomePageTest 

{
    public WebDriver driver;
    @Test
    public void verifyVendorsHomePageTest() throws Exception
    {

        driver = DriverInit.getInstance().getDriver();

        LoginIntoVendors login=PageFactory.initElements(driver, LoginIntoVendors.class);

        login.verifyLoginVendors();

        VendorsHomePageApp vhpapp= PageFactory.initElements(driver, VendorsHomePageApp.class);

        //driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        Thread.sleep(3000);

        vhpapp.clickOnNotificationsTab();

        vhpapp.clickOnProfileTab();

        vhpapp.clickOnTendersTab();

        vhpapp.clickOnDashboardTab();

        vhpapp.clickOnFirstTender();

    }

}

希望能帮助到你..:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 Selenium 运行测试用例时出现 java.lang.NullPointerException 的相关文章

  • 通过 JDBC 调用 Sybase 存储过程时结果集为空

    我正在调用一个通过 JDBC 返回多个结果集的 Sybase 存储过程 我需要获取一个特定的结果集 其中有一列名为 结果 这是我的代码 CallableStatement cs conn prepareCall sqlCall cs reg
  • Eclipse 说“更新 Android Developer Toolkit”

    我不知何故弄乱了我的 Eclipse 和 Android 设置 我不知道如何修复它 问题症状如下 在 首选项 gt Android 中 我尝试选择 android sdk linux 的位置 选择时出现错误 此 Android SDK 需要
  • Apache POI 的 ProGuard 设置

    我正在构建一个使用 Apache POI 库的应用程序 当我调试应用程序 在不运行 Proguard 的情况下编译它 时 一切都运行良好 但是在导出 APK 后 当我运行应用程序并打开 Excel 文件时 出现以下异常 RuntimeExc
  • 使用 viewModel 从 ChildFragment 访问 ParentFragment 中的 ViewModel

    我正在尝试访问ParentViewModel for ParentFragment from ChildFragment using viewModels 这是我的代码 In ParentFragment class ParentFragm
  • 用 Java 捕获扬声器输出

    使用Java可以捕获扬声器输出吗 此输出不是由我的程序生成的 而是由其他正在运行的应用程序生成的 这可以用 Java 完成还是我需要求助于 C C 我有一个基于 Java 的应用程序 使用过的爪哇声音 https stackoverflow
  • 摆动刷新周期

    我试图了解何时使用重新验证 重绘 打包 令人惊讶的是 我没有找到详细的底层文档 请随意链接 到目前为止我已经明白这都是 RepaintManager 的责任 油漆 重新油漆指的是脏 干净的东西 pack validate revalidat
  • 在 jFrame 中启用右键单击

    嘿 我正在寻找如何使用 NetBeans 在 jFrame 中启用 仅且仅 右键单击并显示弹出菜单 使用我的代码 private void formMouseClicked java awt event MouseEvent evt pop
  • 如何从 REstAssured 中的 Json 数组获取 JSON 对象

    任何人都可以帮我解决这个场景 我是新来的RestAssured和处理JSON在我们的自动化脚本中 我有一个API谁的回应是JSONArray i e id 1002 entity testcase fieldName TextName di
  • 如何告诉 Java SAX 解析器忽略无效字符引用?

    当尝试使用字符引用解析不正确的 XML 时 例如 x1 Java 的 SAX 解析器因致命错误而惨死 例如 org xml sax SAXParseException Character reference x1 is an invalid
  • 获取运行时生成的类的字节

    我正在使用一个 Java 框架 该框架使用自定义类加载器在运行时生成一些 代理 类 我想为任何这样的类获取自定义 ClassLoader 从 loadClass 返回的与该类对应的原始字节数组 这可能吗 我知道 如果一个类作为资源存在 那么
  • Spring Data elasticsearch @Query 注解嵌套对象

    我有两节课 Document public class PracticeQuestion private int userId private List
  • 使用JPanel绘制直线并获取点坐标

    我现在完全不知所措 我没有太多用 Java 构建 GUI 我一直在阅读有关 swing 和 JPanel 的所有内容 我认为我想做的事情是可能的 我只是还没有弄清楚how 我正在尝试构建一个 GUI 您可以在其中在某个绘图区域内绘制直线 我
  • Java字符串中的字符数[重复]

    这个问题在这里已经有答案了 可能的重复 Java 使用unicode上划线显示平方根时字符串的长度 https stackoverflow com questions 7704426 java length of string when u
  • Hive NVL 不适用于列的日期类型 - NullpointerException

    我正在使用 HDFS 上的 MapR Hive 发行版并面临以下问题 如果表的列类型是 日期 类型 则NVL https cwiki apache org confluence display Hive LanguageManual UDF
  • bean 中的 Spring JavaConfig 属性未设置?

    我正在考虑将 Spring JavaConfig 与一些属性文件一起使用 但 bean 中的属性未设置 bean 中的属性未设置 这是我的网络配置 Configuration EnableWebMvc PropertySource valu
  • 警告:无法加载 sqljdbc_auth.dll 原因:java.library.path 中没有 sqljdbc_auth

    我正在使用 Ubuntu 12 05 并尝试连接到 Windows Server 2012 来获取数据库 我的数据库名称是 jobs 电脑的IP地址是192 160 1 33 托管在1433 但是当我尝试连接时出现以下错误 WARNING
  • @JsonCreator '无法找到具有名称的创建者属性',即使使用ignoreUnknown = true

    我有以下课程 JsonIgnoreProperties ignoreUnknown true public class Topic private List
  • Selenium Webdriver 中的 IF 语句

    我想知道是否有人可以帮助我解决我正在尝试解决的问题以及 Java 中 Webdriver 的 If 语句 当登录到我正在测试的应用程序时 可以在主页之前进入安全问题页面 如果是新用户等 我希望测试中的代码做的是 如果出现安全问题页面 请填写
  • 确保对象实现 Comparable

    我有一个小问题 想知道如何解决它 我有一个通用类Tuple
  • 使用反射 API 填充 Proto 中的地图字段

    我正在尝试编写一个模块 该模块将获取 Message Builder 和从字段名称到值的映射 并将用值填充构建器 一切正常 直到我遇到地图字段 使用 Proto3 我收到一条特定消息 我知道我可以执行该消息的字段 builder b put

随机推荐

  • 如何为我的两个不同目标指定 #define 命令

    我有一个项目 我将其分为两个目标 原始的单目标项目使用了许多定义命令 但是我现在需要这些值根据我正在构建的目标而有所不同 这样做的正确方法是什么 我应该使用 AppDelegate 上声明的 NStrings 吗 或者我可以在设置 defi
  • ag 网格在单元格值更改时更改单元格颜色

    当网格中的单元格旧值 单元格新值时 我试图更改单元格颜色 我试过了 if e oldValue e newValue e colDef cellStyle function e return backgroundColor green 但是
  • 使用 Opencv 示例保存相机中的图像

    我用过这段代码来自iOS 示例 并尝试保存相机中的图像 问题是图像正在保存 但带有蓝色色调 如下所示 下面是我用来保存图像的代码 void processImagecv Mat image ALAssetsLibrary library A
  • Eclipse 插件 - 与文件扩展名和透视图关联的编辑器

    我正在开发两个 Eclipse 插件 我有下一个问题 我有两个管理相同文件的视角 我想在文件扩展名 编辑器 透视图之间建立关联 我的意思是 如果我在透视图 1 中打开文件扩展名 XXX 它会使用编辑器 A 但如果我在透视图 2 中打开相同的
  • 从“db 0”加载寄存器不会将 0 加载到 EAX 中?

    我已经把头撞在墙上一个多小时了 我不明白为什么下面的方法不起作用 如果我改变b db 1 to b db 0那么它应该打印 10 否则它应该打印 0 相反 程序总是打印 10 我一直在编写一个编写程序集的项目 这是失败的单元测试之一 我只是
  • 在 CONSOLE C# 中检测单个按键

    我是编码新手 决定从 C 开始 我决定编写一个简单的控制台程序来检测按键操作 如果只按下 Enter 键 它将显示数字 问题是你只要按住键 它就会继续显示数字 我应该在代码中添加什么以便程序仅检测SINGLE按下并忽略用户是否HOLDING
  • PHP中如何计算两个日期之间的天数? [复制]

    这个问题在这里已经有答案了 如果我有几个字符串 startDate and endDate被设置为 例如 2011 07 01 and 2011 07 17 指2011年7月1日和2011年7月17日 如何计算从开始日期到结束日期的天数 在
  • 如何只用左、右两个键控制蛇

    目前 我正在使用所有四个键来控制蛇左 右 上 下 我想知道如何只使用左右键来移动蛇 if event key pygame K LEFT snake direction 2 elif event key pygame K RIGHT sna
  • jQuery 找到哪个父级更接近?

    在 jQuery 中你可以调用closest寻找最近的父母 如果我有一个a in a li in a ul in a td in a table 我想知道是否ul父母比父母更亲近table父母 显然 在这种情况下 答案是显而易见的 如果我跑
  • 如何根据子值使用 jq 提取键

    我正在尝试使用 jq 处理一些 JSON 具体来说 我想要一个基于其子值的特定键 给定示例 foo primary true blah beep bar primary false blah narf baz primary false b
  • 来自 PHP exec 的 taskkill

    我刚刚尝试执行此操作 function kill hr exec taskkill IM uper exe output array return print r output echo br return 然而 输出是这样的 它不是很有用
  • 根据单元格值复制行并粘贴到具有相同单元格值名称的新工作表上

    我有一个数据表 其中包含 3 列的员工列表 COLUMN A DEPARTMENT COLUMN B EMPCODE COLUMN C EMPNAME 这是示例数据 我想根据 COLUMN A DEPARTMENT 拆分此工作表的内容 并将
  • Angular:根据从下拉菜单中选择的选项显示 div 内容(ng-show/ng-switch)

    所以我对前端 角度 bootsrap 等 完全陌生 但我这里有一个我创建的 JSFiddle 链接 我想做的基本上是如果有人在下拉列表中选择选项 VA 菜单 我想使用适当的 ng 开关或显示 并显示具有相同名称的 div 类 在本例中为 d
  • 使用 CType 时检测从 Windows DLL 调用 Python 脚本

    我正在寻求在 Windows DLL 中添加功能来检测调用 Python 脚本的名称 我正在使用 ctypes 通过 Python 调用 dll 如答案中所述如何从脚本语言调用 DLL 在 dll 中 我能够使用 WINAPI GetMod
  • 如何在 Jupyter Lab 中打开调试器按钮

    我正在使用 jupyter lab 并尝试嵌入debugger in it Windows 10 64 bit 以下是我遵循的步骤 conda create name ml python 3 8 2 conda activate ml co
  • 使用 Chef 在 Windows 节点上挂载 Windows 共享

    我正在尝试将文件从 Windows 共享复制到我的节点的缓存 显然没有办法从remote file 做到这一点 所以我的替代想法是尝试将Windows 共享安装到本地驱动器并通过文件资源访问我需要的文件 然而 即使 Chef 告诉我挂载成功
  • 如何在 Eclipse 中使用调试视角。[调试 java/j2ee 应用程序]

    是否有任何易于遵循的教程来在 Eclipse 中调试 Java J2EE 应用程序 有关如何检查未检查和已检查异常的分步指南 我一直试图在互联网上寻找 但没有用 要添加 Java 异常断点 在 调试 透视图中选择 断点 视图 然后单击异常断
  • ip地址和mac地址的正则表达式

    谁能建议我 ip 地址和 mac 地址的正则表达式 我正在使用 python 和 django 例如 http ip地址 SaveData 127 0 0 1 00 0C F1 56 98 AD 对于 mac 地址 我尝试遵循但没有成功 0
  • 以 boost 精神实现运算符优先级

    我试图复制这个例子为了实现类似 C 的运算符优先级规则 我从一个子集开始 但最终计划添加其他子集 尽我所能 我无法获得解析单个二进制操作的语法 它可以很好地解析文字 44 3 42 stackoverflow 但会失败 例如3 4 我确实看
  • 通过 Selenium 运行测试用例时出现 java.lang.NullPointerException

    我面临 NullPointerException 的问题 我尽了最大努力 但无法解决这个问题 我正在为我的项目实现 POM 模型 Selenium 这一页 public class VendorsHomePageApp WebDriver