硒元素.click()不起作用



你好:我正在使用Selenium/Java从网站获取PDF。网站不会提前生成它们,但只有在我点击链接后才会生成。当我这样做的时候,网络服务器会离开几分钟,然后带着内容回来。

我使用的是Firefox,以及它内置的PDF查看器。当我点击主浏览器窗口中的下载链接时,它会打开另一个窗口来接收PDF内容。几分钟后,子窗口就会充满PDF内容,我所需要做的就是单击Firefox工具栏上的下载按钮,然后按确认对话框上的保存。这两件事我都做过,有时也很成功。

我的问题是,当我执行代码点击子窗口的下载按钮时,有时会发生。。。

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

element.click();

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

driver.findElement(按.id("下载"))

从不抛出异常,因此在看来总是成功。然而,随后的元素.click()通常不会产生预期的结果。

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

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

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

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

此外,如果页面是使用Angular之类的动态框架进行编码的,那么最好使用Protractor进行测试,它基于Selenium,但在视图中发生更新时会注意到更新。

最新更新