4

次のことを行う方法がわかりません。

テストを実行する前に、ファイルをサーバーに投稿 (マルチパート) したいと考えています。バックエンドは、これらのアップロードのコンテンツ プロファイルを作成し、UI からアクセスできます。テストを実行する必要があるのは、このコンテンツ プロファイルです。

.fill() 機能を認識していますが、UI を介してファイルをアップロードしたくないため、これは当てはまりません。CasperJSまたはjavascriptを介してこれを達成できる方法はありますか、または誰かが私に役立つドキュメントを教えてくれますか?

4

3 に答える 3

7

casperjs と phantomjs の両方のドキュメントを読んだ限りでは、直接ファイルを送信することは許可されていません。以下のように curl を使用できます。

curl http://some.testserver.com/post.php \
   -F file_input=@/path/to/my/file.txt \
   -F "text_field=Some Text Here" \
   -F some_number=1234

ただし、 casperjsで POST リクエストを開くことはできます。

casper.start();

casper.open('http://some.testserver.com/post.php', {
    method: 'post',
    data:   {
        'title': 'Plop',
        'body':  'Wow.'
    },
    headers: {
        'Content-type': 'multipart/form-data'
    }
});

casper.then(function() {
    this.echo('POSTED it.');
});

casper.run();

関連するドキュメントは次のとおりです。

http://docs.casperjs.org/en/latest/modules/casper.html#open

于 2013-08-28T02:13:13.947 に答える
1

これを試して:

casper.thenOpen('about:blank', function(){
    this.evaluate(function(){
        var action = 'upload.php'
        var html = '<form action="'+action+'" method="post" enctype="multipart/form-data">'
        html += '<input type="file" name="files[]" multiple="multiple">'
        html += '<button type="submit">Submit</button>'
        html += '</form>'
        document.write(html)
    })
    this.fill('form',{
        'files[]': 'file.txt'
    }, true)
    this.waitFor(function(){
        var uri = casper.evaluate(function(){
            return document.documentURI
        })
        if ( 'about:blank' === uri ){
            return false
        }
        return true
    })
})
于 2014-03-08T23:33:43.217 に答える