c# - 无法使用 PhantomJs(和 Selenium WebDriver)上传文件

标签 c# selenium-webdriver phantomjs ghostdriver

我在做什么:

首先,我的 HTML 如下所示:

<form action="http://example.com/upload_photo_iframe.html" preview_div="upload_photo_div" submit_button="submit_btn" upload_field="photo_upload" target="photo_target" enctype="multipart/form-data" method="POST" id="uploadfile" name="uploadfile">
    <input type="hidden" value="CSRF_iframe_photo_upload" name="csrfname">
    <input type="hidden" value="3350427f0f068509081a09e283607214001b6912843ffb937b934208c91d9041c88faf0e66df4f3898ef202a34b669647f5b3fd9a2122e389acd3f53c33fc88b" name="csrftoken">
    <label class="file-upload">
            <p id="upload_text">Click Browse to choose a file then click Upload</p>
            <input type="file" class="file" id="photo_upload" name="photo_upload" accept="image/*">
    </label>
    <input type="hidden" value="true" name="makeLargeThumb">
    <input type="hidden" value="p" name="size">
    <input type="hidden" value="P" name="type">
    <input type="hidden" value="5120000" name="MAX_FILE_SIZE">
    <input type="hidden" value="0" name="album_id" class="album_id_hidden">
    <input type="submit" class="grey_btn" id="upload_btn" value="Upload" name="submit_btn">
<input type="hidden" name="callback" value="document.forms.uploadfile.handleReceive"><input type="hidden" name="fieldName" value="photo_upload"></form>

我把整个东西贴出来了,文件输入是以下部分:

<input type="file" class="file" id="photo_upload" name="photo_upload" accept="image/*">

我的情况:

我将 Selenium WebDriver 与 PhantomJs (C#) 结合使用。 在此之前,我使用 FireFox 而不是 PhantomJs 并通过以下方式上传文件:

_driver.FindElement(photoUploadPath).SendKeys(imagePath);

我的问题:

但是当我使用 PhantomJs 时这会崩溃。

我解决问题的尝试:

我发现以下线程讨论了这个问题: https://github.com/ariya/phantomjs/issues/10993

我尝试了建议的解决方案:

((PhantomJSDriver)driver).executePhantomJS("var page = this; page.uploadFile('input[type=file]', '/path/to/file');");

但是,虽然这不会引发错误,但它不会上传文件。

经过广泛搜索后,我唯一的选择就是在这里询问,希望有人能帮助我。

在我看来,这是许多使用 PhantomJs+Selenium 的人的常见问题,这让我想知道为什么这个错误还没有被修复。

最佳答案

今天刚遇到同样的问题,解决了。 文件上传功能在 PhantomJS 2.0 中被破坏。请检查此线程 https://github.com/ariya/phantomjs/issues/12506获取更多信息。

所以通常你应该自定义构建 PhantomJS 浏览器(或等待官方修复)并使用上面已经提到的脚本:

((PhantomJSDriver)driver).executePhantomJS("var page = this; page.uploadFile('input[type=file]', '/path/to/file');");

请注意,线程中已经提供了一些自定义构建(我在那里为 Windows 定制了一个自定义构建)。

关于c# - 无法使用 PhantomJs(和 Selenium WebDriver)上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29439073/

相关文章:

c# - 一个应用程序使用不同的语言

c# - 大对象堆分片

node.js - 在 Selenium ChromeDriver 中禁用图像

xpath - 如何使用 xpath 从占位符中获取值

javascript - 使用 PhantomJS 抓取图像 src URL

javascript - PhantomJS - 选择 html 元素

java - PhantomJS 和 Selenium Webdriver - 如何清除 session

c# - 使用 Linq 对元组列表进行分组、排序

c# - 异常与返回码 : do we lose something (while gaining something else)?

selenium - 如何使用java在Selenium webdriver中按 "ALT+T"。我想通过按它来切换选项卡