【问题标题】:Selenium clicking a link where the href is javascript:void[0];Selenium 单击 href 为 javascript:void[0] 的链接;
【发布时间】:2026-02-18 12:30:02
【问题描述】:

我正在尝试查看单击链接时是否会在页面上使用 Selenium WebDriver 和 Java 生成报告。

发生的情况是一个页面上有一堆链接,其中大多数在单击时转到另一个页面,我已自动填写详细信息并提交表单以检查生成的报告。

但是,有三个报告在单击时会导致某些 JS 运行,几秒钟后,同一页面上会显示一个新链接以下载报告。

如何点击此链接?

我正在将页面上的所有链接读入 WebElements 列表,然后循环遍历它们以查找 href 包含 javascript: to void[0];

然后我尝试调用列表中该元素的 click 方法 allLinks.get(i).click();

这与我对其他报告所做的相同,它工作正常,但在这 3 个报告中我收到错误 “元素当前不可见,因此可能无法与之交互”

如果我检查启动运行它的 JS 的链接,则使用 firebug:

<a onclick="requestReportGeneration('2cad4d4e5c8855c47a88b6ddf8345735', 'reportDiv33','CSV')" href="javascript:void[0];">CSV</a>

谁能推荐一种点击链接的方法?

该页面包含许多表示 CSV 的链接,因此我不能只使用链接文本。

更新: 我刚刚想到这可能会有所帮助。当我第一次来到带有报告链接的页面时,它会说“订购报告”我需要单击标题,然后调用 JS 函数来展开该部分并显示链接。

报告之所以有效,是因为当我来到这个页面时,我只是阅读了页面源代码的所有 href 并执行 driver.get(reportList.get(i); 所以我实际上并没有点击链接。

我添加了一个链接来获取标题的 xpath 并单击它,但是当我尝试单击带有 href 或 javascript: void 的链接时,我仍然收到一条错误消息,说它不可见。

【问题讨论】:

  • 您是否尝试在应该使其可见的链接之前点击报告的基础链接?
  • 不,我正在尝试单击链接 CSV,然后在页面上运行一些 JavaScript 以生成报告。 CSV 链接总是在那里,一旦点击一个加载圈,就会显示一个名为下载报告的新链接,然后我会检查它,但我什至无法点击 CSV 链接
  • 您能否提供该页面的链接,或者至少提供其来源?
  • 抱歉,问题中没有正确显示源代码,因为我没有将其包装在代码标签中。我已经更新了,请看上面。不幸的是,该页面目前是内部工作的,出于安全原因,我无法提供整个页面的源代码。我添加到问题中的代码在一个表中,但如果有帮助,该表没有名称。

标签: java javascript selenium automation webdriver


【解决方案1】:

对于包含 href="javascript:" 的锚标记,请使用本机 javascript click() 方法,如下所示:

WebElement wwwLink = ((FindsByCssSelector) webDriver)
                .findElementByCssSelector("table[id='initiatorsTable'] tbody tr:not([class^='empty']) td[class='first'] a");

JavascriptExecutor exec = (JavascriptExecutor) webDriver;
exec.executeScript("arguments[0].click()", wwwUrl);

//TODO: wait for action code ...

【讨论】:

    【解决方案2】:

    检查此命令是否点击任何(实际上是第一个带有 javascript:void[0] 的)链接

    driver.findElement(By.xpath("//a[contains(@href,\"javascript:void[0]\")]")).click();
    

    如果是 - 那么迭代器有问题

    【讨论】:

    • 我刚刚尝试过,但我得到了同样的错误,说该元素当前不可见。如果我在链接上使用萤火虫,我可以看到 xpath 是 .//*[@id='mainarea']/div[2]/fieldset[3]/div/table/tbody/tr[1]/td[2 ]/a 可以使用它吗?我有点想避免使用 xpath,因为这个测试将在多个站点上运行。我没有检查过,但我不知道三个带有 javascript:void href 的报告的 xpath 在每个站点上是否相同。
    • 我在问题中添加了更多信息,可以解释为什么这不起作用。请你看一下好吗?
    • 只需添加额外的步骤,点击链接(标题)和一些等待加载结果,然后点击 javascript:void
    最近更新 更多