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

时间:2015-04-03 20:15:33

标签: 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的人来说,这是一个常见的问题,这让我想知道为什么这个bug还没有解决。

2 个答案:

答案 0 :(得分:1)

今天刚遇到同样的问题并解决了它。 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进行了自定义构建)。

答案 1 :(得分:0)

看一下我的回答here在过去处理非浏览器对话框(例如文件上传)时,它已经过了我运气好的过程。

虽然我链接到的问题是关于Java的,但我的答案中的代码实际上是C#。