【问题标题】:How to download a file with WebClient if it is being served by javascript如果文件由 javascript 提供,如何使用 WebClient 下载文件
【发布时间】:2015-10-06 11:06:19
【问题描述】:

我正在编写一个基于 Selenium WebDriver 的自动化 UI 测试解决方案。我需要一个可以实现文件下载的独立于浏览器的方法。

我的方法,依赖System.Net.WebClient类,如果有属性(如hrefsrc),可以成功从站点下载文件从中推断文件位置。

但是,当通常保存引用的元素没有指向文件的指针时,我遇到了问题。相反,这个元素有一个与 Javascript 点击事件相关联的 CSS 类。单击该元素时,Javascript 会在动态创建的链接上触发 window.open 操作。

关于如何从我的 C# 代码中成功捕获该文件引用的任何想法?

【问题讨论】:

    标签: javascript c# .net selenium-webdriver


    【解决方案1】:

    如果我的理解正确,您正在构建客户端应用程序,而服务器行为超出了您的控制范围。您想模仿真实浏览器的以下行为:

    1. 客户端导航到一个 URL。
    2. 客户端点击链接(或其他元素)触发 JavaScript 函数。
    3. JavaScript 函数将客户端重定向到正确的 URL 下载资产。
    4. 客户端下载资产。

    WebClient 类无法做到这一点,它不会公开任何点击行为或任何执行 JavaScript 的方式。 WebClient 实例不是浏览器。它只是一个类,提供了一种向给定 URL 发送数据和从给定 URL 接收数据的方法。

    这并不能直接回答您的问题,但有理由认为,在使用自动化工具时,您应该坚持可以通过工具 IE 完成的工作,您应该使用浏览器做任何你需要做的事情。如果由于某种原因您真的需要下载该点击事件的结果,但不能通过 selenium 下载,那么您可能需要使用无头浏览器。 This question 讨论了您可以使用的一些选项。

    This question 讨论了更多选项。

    【讨论】:

    • 是的,这正是我想要完成的。我希望不必为每个目标浏览器维护一个浏览器配置文件,因为这会增加其自身的复杂性。我会查看您发布的那些链接,看看是否可以找到替代解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多