使用静态 WebDriver 实例的 java.lang.NullPointerException

2024-01-27

我想将我的代码分成更小的函数。 但有一个问题,因为驱动程序并非适用于所有功能。 所以我将它声明为常量(或者有更好的方法吗?)

但在第三个函数中,它在线失败:

Select dropdown_finance_product = new Select(driver.findElement(By.xpath("//select[@id='ResultsNumber']")));

这是控制台消息:

Exception in thread "main" java.lang.NullPointerException
    at Scraping.scrapeit.fetch_urls(scrapeit.java:49)
    at Scraping.scrapeit.main(scrapeit.java:24)

Code :

package Scraping;

import java.io.IOException;
import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.WebDriverWait;

import tools.Xls_Reader;

public class scrapeit {

    static WebDriver driver;

    public static void main(String[] args) throws IOException {

        start_browser();
        fetch_urls();
        read_excel();
    }

    public static void start_browser() {

        System.setProperty("webdriver.chrome.driver", "C:\\Chrome Driver\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();

        driver.manage().deleteAllCookies();
        driver.get("http://www.example.com/search/items/new/");
        driver.manage().window().maximize();
        WebDriverWait wait = new WebDriverWait(driver, 20);
        wait.until(ExpectedConditions.titleContains("New items));
    }

    public static void fetch_urls() {

        Select dropdown_finance_product = new Select(driver.findElement(By.xpath("//select[@id='ResultsNumber']")));
        dropdown_finance_product.selectByVisibleText("100");
        System.out.println("Selected 100 Items Dropdown");

        // Open Excel and write urls back
        Xls_Reader datatable = new Xls_Reader("C:\\scrape.xlsx");

        List<WebElement> num_items = driver.findElements(
                By.xpath("//a [contains(@href,'http://www.example.com/search/items/new/latest-')] "));

        for (int i = 0; i < num_items.size(); i++) {
            System.out.println("How many items on page = : " + num_items.size() + " counter = " + i);

            String link = num_items.get(i).getAttribute("href");

            datatable.setCellData("New", "URL", i + 2, link);
            System.out.println("URL : " + link);
        }
    }

    public static void read_excel() {

        // Read in url and process...
        Xls_Reader datatable = new Xls_Reader("C:\\scrape.xlsx");
        int r = datatable.getRowCount("URL");
        int c = datatable.getColumnCount("URL");
        System.out.println("num of rows = " + r + " num of cols = " + c);
    }
}

该错误说明了一切:

Exception in thread "main" java.lang.NullPointerException

In class scrapeit你已经声明了网络驱动程序作为一个例子网络驱动程序 as static如下 :

static WebDriver driver;

但随后你再次初始化另一个driver作为一个新实例网络驱动程序如下 :

WebDriver driver = new ChromeDriver();

因此你看到java.lang.NullPointerException

Solution

一个快速的解决方案将不是创建另一个实例网络驱动程序你需要使用static的实例网络驱动程序。所以你需要删除网络驱动程序 from WebDriver driver = new ChromeDriver();如下 :

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

使用静态 WebDriver 实例的 java.lang.NullPointerException 的相关文章

  • Access / Word 2010 VBA 邮件合并尝试打开 [文件夹名称].mdb 而不是 ACCDB 源

    我们正在尝试从 Access 中自动执行邮件合并过程 单击按钮后 VBA 将运行指定当前数据库 accdb 作为数据源并运行 SQL 具体代码如下 Set up Word Dim objWord As Object Set objWord
  • 在 GWT 中,在任何主机页标记上添加事件处理程序

    我想为任何标签添加 MouseOver 事件处理程序 举个例子 我想为旧版 HTML 页面中的每个锚点页面添加事件处理程序 继GWT指南 http code google com webtoolkit doc 1 6 DevGuideUse
  • 迭代 pandas 数据框的最快方法?

    如何运行数据框并仅返回满足特定条件的行 必须在之前的行和列上测试此条件 例如 1 2 3 4 1 1 1999 4 2 4 5 1 2 1999 5 2 3 3 1 3 1999 5 2 3 8 1 4 1999 6 4 2 6 1 5 1
  • ngmodel与Angular2中复选框的动态数组绑定

    我有一个 Angular 2 组件 其中我从数组生成复选框列表 现在我需要根据选中的复选框填充不同的数组 这应该是双向绑定 这意味着如果复选框的值已在数组中 则必须已经检查了复选框 我在 Angular 1 中使用了一个名为 checkli
  • 闪亮井板宽度

    library shiny library shinydashboard ui lt dashboardPage dashboardHeader dashboardSidebar dashboardBody wellPanel tags d
  • 使用 crypt() 加密

    我目前正在做一个非常安全的登录系统 但我是 crypt 函数的新手 需要一些快速帮助 我在注册过程中使用 crypt 加密密码字符串并将其保存到数据库中 但是 我如何在登录过程中解密密钥 或者我应该怎么做 或者是否可以对提交的密码字符串进行
  • 您可以使用关键字参数而不提供默认值吗?

    我习惯于在 Python 中使用这样的函数 方法定义 def my function arg1 None arg2 default do stuff here 如果我不供应arg1 or arg2 那么默认值None or default
  • 在 Android 中使用 iText 将图像添加到特定位置

    我想使用 Android 中的 iText 将图像添加到 PDF 文件中的特定位置 这是一个可填写的表单 我添加了作为图像占位符的文本框 我想要做的就是像这样获取该文本框和图像 public class FormFill public st
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • NGinx $proxy_add_x_forwarded_for 和 real_ip_header

    我在 NGinx 下有一个 web 应用程序和另一个前端负载均衡器 如下所示 x x x x IP 地址 客户端 a a a a gt LB b b b b gt NGX c c c c gt WEBAPP d d d d 这是我的 NGi
  • Typescript 函数接口重载

    我有以下代码 interface MySecondInterface a type A interface MyInterface val1 string val2 string MySecondInterface a
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 带显示块的SPAN

    和默认有什么区别 div 元素和默认值 span 元素与display block HTML 元素的有效性和语义存在差异 否则它们是相同的 div and span两者都被定义为通用容器 在 HTML 方面没有更深层次的含义 一个默认为块显
  • 自定义 Visual Studio 2008 中的位置栏

    有人成功定制了 VS 2008 的 Places Bar 吗 我从 VS 2005 进行的自定义设置并没有转移到 2008 显然 并且无论我如何处理注册表 我都无法使我的自定义位置出现在 打开 对话框中 我已经阅读并应用了相关的MS KB文
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder
  • 使用泛型全面实现特征

    我正在通过实现矩阵数学来练习 Rust 但遇到了一些障碍 我定义了我认为与矩阵相关的特征 trait Matrix
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创
  • 当ScrollView滚动到底部时加载更多数据

    我有一个带有动态加载内容的滚动视图 有时可能会有很多内容 所以我想在用户滚动到底部时加载更多内容 我搜索了合适的方法 发现了两种 onScrollChanged and getScrollY 但我不知道如何将它用于我的目的 请给我一些建议
  • android ndk 硬件调试内存

    背景 我对 C 很有经验 对 Android 和 Java 还很陌生 但这是编程的环境问题 我已经用 ANSI C 开发了一个管理应用程序 可以移植到任何操作系统 只需在依赖于操作系统的代码中添加 UI 即可 它使用相当多的内存 特别是对于
  • CUDA 中指令重放的其他原因

    这是我从 nvprof CUDA 5 5 获得的输出 Invocations Metric Name Metric Description Min Max Avg Device Tesla K40c 0 Kernel MyKernel do

随机推荐

  • 如何将PostgreSQL从9.6版本升级到10.1版本而不丢失数据? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在将 PostgreSQL 数据库用于我的 Ruby on Rails 应用程序 在 Mac OS
  • 如何关闭 iOS 设备[重复]

    这个问题在这里已经有答案了 是的 实际上 我认为我所要求的是不可能的 但我想知道您是否知道如何使用 swift 或 Objective C 代码关闭 iPhone 或者至少进入飞行模式 您无法使用苹果提供的公共 API 来执行此操作 这可以
  • Python:LookupError:未知编码:十六进制

    我正在使用名为 Tweepy 的 Twitter API 它一直工作正常 然后我重新启动了服务器 现在我得到了这个 gt gt gt import tweepy Traceback most recent call last File
  • 选择出现超过 3 次的行

    我有一个表 active users 我想从中选择 user id 出现超过 2 次且 notification 0 的行 只想要单个结果 需要查询结果 Id User id Mobile last seen notified 1 2585
  • FFMPEG“分段错误”与网络流源

    我使用版本 4 2 2 静态 来自 https johnvansickle com ffmpeg https johnvansickle com ffmpeg 最终代码将位于 Amazon AWS lambda 上 目标 使用 url 流并
  • HttpRequest.Content.IsMimeMultipartContent() 在应该返回 true 时返回 false

    我需要将 HTTP 请求作为 MultiPartFormData 发送到 REST 控制器 它正在工作 但现在我在控制器上进行的检查声称请求的类型不正确 即使我可以在调试器中看到请求的类型正确 以供参考 这是调用它的控制台应用程序代码 us
  • Play Framework 2.2.x 多个路由文件

    我已经读完这部剧了 对于 Scala 书中关于模块的部分 我似乎无法弄清楚如何从引用的模块导入路由 我已将模块设置为 build sbt 文件中的库依赖项 并尝试将路由导入到路由文件中 如下所示 构建 sbt libraryDependen
  • 如何使用 Emacs 更改文件的读/写模式?

    如果文件设置为只读模式 如何在 Emacs 中将其更改为写入模式 反之亦然 M x 只读模式 在非常旧的 Emacs 版本中 命令是 M x 切换只读 在我的 Windows 机器上 这相当于 Alt x 调出元提示符并输入 只读模式 来调
  • 检查一个列表是否以另一个列表的元素开头

    如果列表的开头恰好是另一个列表的元素 那么最简单 最Pythonic的方法 是什么 考虑以下示例 li 1 4 5 3 2 8 Should return true startsWithSublist li 1 4 5 Should ret
  • 如何在我的网站中实施 HSTS

    我有一个网站 来自 godaddy 的域名并托管在 hostgator 中 当我手动更新证书时 我可以将我的网站重定向到 https 但它总是从 google 搜索转到 http 在网上搜索后 我了解到考虑到Strict Transport
  • Java ant 脚本不显示警告

    我有一个 1 4 java 代码 我想用 1 5 编译器编译它 因为我想看到所有警告消息 我向 javac 添加了 Xlint 选项 但输出似乎没有变化 但我知道代码中至少有几个警告 我将这两行添加到我的 ant 脚本的编译目标标记中
  • memcached数据缓存的设计模式

    可以轻松地将可选的 memcached 缓存封装到现有的数据库查询中 例如 旧 仅限数据库 function getX x get from db return x end 新 带有内存缓存的数据库 function getX x get
  • 了解 C# 中运行时代码生成的各种选项(Roslyn、CodeDom、Linq 表达式,...?)

    我正在开发一个应用程序 我想在其中动态生成数值计算的代码 为了性能 作为数据驱动操作来执行此计算太慢 为了描述我的要求 请考虑此类 class Simulation Dictionary
  • 有没有办法让vim打开一个目录及其所有子目录中的所有.C和.H文件?

    我想在 vim 中对大约 20 个 C 和 H 文件执行替换 并且我想一次打开它们 所有文件分布在多个嵌套目录中 命令在最顶层父目录中执行 我可以只使用 vim 来完成此操作 还是需要 find 命令和 p 选项 如图所示 关于这个答案 h
  • 如何在浏览器关闭时关闭 vaadin 会话但保留 http 会话?

    我正在开发一个 vaadin 7 应用程序 使用 jaas 进行用户身份验证和授权 并在应用程序服务器 glassfish 中定义领域 我有这样的要求 用户可以保持登录状态一段时间 这样他就不需要每次都输入密码 我通过设置 http 会话的
  • Github 限制访问

    我正在使用github 我正在尝试找出如何限制我拥有的承包商的回购访问权限 我有主要的 Rails 代码库 还有一个承包商将为我做一些 css ux 类型的工作 我想让承包商能够仅将代码签入 github 的某些文件夹 理想情况下 我可以让
  • 有没有更好的方法来获取 PHP 的货币汇率?

    使用以下代码的货币汇率有时有效 有时无效 而且一点也不可靠 有没有更好的方法来获取 PHP 的货币汇率 public function getJPYtoUSDExchangeRate from JPY to USD amount 1 dat
  • 如何使用 setuptools 排除或忽略软件包预发布?

    我正在使用 setuptoolstensorflow包依赖 我跑步时注意到setup py install 它发现tensorflow 1 13 0rc2 当我跑步时pip 它发现tensorflow 1 12 然后我发现这张票 https
  • 设置新创建的 CAShapeLayer 的正确框架

    简而言之 苹果没有设置frame or bounds for a CAShapeLayer自动 并且苹果尚未实现等效的 UIView sizeThatFits 如果您使用路径边界框的大小设置框架 一切都会出错 无论你如何尝试设置它 它都会搞
  • 使用静态 WebDriver 实例的 java.lang.NullPointerException

    我想将我的代码分成更小的函数 但有一个问题 因为驱动程序并非适用于所有功能 所以我将它声明为常量 或者有更好的方法吗 但在第三个函数中 它在线失败 Select dropdown finance product new Select dri