【问题标题】:Selenium element.click() does not workSelenium element.click() 不起作用
【发布时间】:2016-02-14 09:49:12
【问题描述】:

您好:我正在使用 Selenium/Java 从网站获取 PDF。该网站不会提前生成它们,但只有在我点击链接之后才会生成它们。当我这样做时,网络服务器会关闭几分钟,然后返回内容。

我使用的是 Firefox 及其内置的 PDF 查看器。当我从主浏览器窗口单击下载链接时,它会打开另一个窗口来接收 PDF 内容。几分钟后,子窗口就会被 PDF 内容填满,我只需单击 Firefox 工具栏上的 下载 按钮,然后按 保存 按钮在确认对话框中。有时我已经成功地完成了这两件事。

我的问题,有时发生在我执行代码点击子窗口的下载按钮...

WebElement element = driver.findElement(By.id("download"));

element.click();

有时,它只是不起作用。声明:

driver.findElement(By.id("download"))

...从不抛出异常,因此它似乎总是成功。然而,随后的 element.click() 通常不会产生预期的结果。

我在这个问题上投了大约 100 次飞镖,但我似乎找不到能产生一致结果的飞镖。我尝试引入延迟,多次调用 findElement,尝试在子窗口上使用驱动程序以确认其与该窗口的连接(所有返回值均为正值),但似乎没有任何帮助使 element.click() on该死的下载链接成功了。

我发现 Selenium 是一种坚如磐石的解决方案,尤其是在通过主窗口工作时......它从不错过任何一个节拍,我对这种行为印象深刻。这是我的第一个 Selenium 项目,我希望使用它的人可以对这个特定问题提出建议。

【问题讨论】:

    标签: pdf selenium download


    【解决方案1】:

    如果没有有关如何填充子窗口的其他信息,很难回答这个问题。如果子窗口使用 javascript 将按钮添加到页面并定义其行为(很可能),那么当您查找该元素时,该元素实际上可能存在于页面上(即不会引发错误),但它可能尚未激活或准备被点击。

    最好查看子页面源代码中的元素定义,以更好地了解按钮的编码方式。如果您可以访问设计/实现该按钮的 Web 开发人员,那就更好了。如果您可以等待执行单击操作,直到按钮处于所需状态,这应该可以解决问题。

    此外,如果页面是使用 Angular 等动态框架编码的,您最好使用 Protractor 进行测试,它基于 Selenium,但在发生更新时会知道视图中的更新。

    【讨论】:

    • 您作为答案的次要问题可能最好作为另一个问题提出。如果您创建一个新问题,您将获得更直接的答案。请随时在 cmets 中将其链接到我的答案,我会为您提供答案。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 2016-04-29
    • 2012-04-22
    • 2015-09-27
    相关资源
    最近更新 更多