如何解决使用C#中的Selenium ChromeDriver单击时无法下载PDF
首先,我想尝试以下链接堆栈溢出文章中的建议,但无济于事:
-
这与我的问题最相似,没有答案Downloading PDF using Selenium Java not working in Chrome
-
How to download a pdf file in chrome using selenium webdriver
这是我的ChromeOptions所拥有的:
{
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.AddUserProfilePreference("download.prompt_for_download",false);
chromeOptions.AddUserProfilePreference("download.directory_upgrade",true);
chromeOptions.AddUserProfilePreference("download.default_directory",DOWNLOAD_DIR);
//chromeOptions.AddUserProfilePreference("disable-popup-blocking",true);
chromeOptions.AddUserProfilePreference("plugins.plugins_disabled","Chrome PDF Viewer");
chromeOptions.AddUserProfilePreference("plugins.always_open_pdf_externally",true);
chromeOptions.AddArgument("--no-sandbox");
_driver = new ChromeDriver(chromeOptions);
}
您会注意到(“ disable-popup-blocking”,true)位已被注释掉,这是因为它使我没有看到以下内容:
显示要下载的PDF。
与上述所有链接的帖子一样,单击链接而不是在新窗口中打开时,我需要下载PDF,并且由于Selenium对PDF的限制,我无法成功单击该PDF。禁用的查看器上的“打开”按钮。 Visual Studio引发以下异常:
根据注释中的要求,以下是尝试与禁用的PDF查看器进行交互的代码:
_driver.SwitchTo().Window(_driver.WindowHandles[1]);
_driver.FindElement(By.LinkText("Open")).Click();
有人对这里发生的事情有任何可能的解决方案或见解吗?我对编程还是比较陌生,希望能得到任何建议。
在所有相关的情况下,我尝试下载的PDF是Salesforce Lightning PDF
解决方法
NoSuchElementException表示您的元素不在DOM上。
您必须将By.LinkText("Open")
更改为实际按钮的选择器。
更新:我终于找到了解决方案,所以我在发布,以防其他人遇到此问题。
这里的问题与单击iFrame内的PDF的按钮有关(请参见上面链接的“禁用的PDF查看器”图像)。前面提到的所有ChromeOptions都是正确,并且代码试图与禁用的PDF查看器进行交互。此行缺少什么:
_driver.SwitchTo().Frame("pdfFrame");
将位于上面列出的两行之间,从而产生3行代码,如下所示:
_driver.SwitchTo().Window(_driver.WindowHandles[1]);
_driver.SwitchTo().Frame("pdfFrame");
_driver.FindElement(By.LinkText("Open")).Click();
添加此内容后,我就可以与“打开”按钮进行交互,并且可以将PDF完美地下载到所需的目录中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。