0

我使用 CasperJS 提交表单,一切正常。

表格代码:

<form method="post" action="validation.htm">

<input id="name" type="text" value="" name="dataname"></input>
<input id="url" type="text"  value="" name="dataurl"></input>
<textarea id="desc" cols="30" rows="4" name="description"></textarea>

<select id="color" size="1" name="datacolor">
  <option value="Red">Red</option>
  <option value="Black">Black</option>
  <option value="Blue">Blue</option>
</select>

</form>

casperjs代码:

casper.fill('form',
    dataname: 'Anton',
    dataurl: 'http://example.com',
    description: 'testing text...',
    datacolor: 'Blue'
, 1);

但现在我需要将价值推到datacolor页面上未列出的值。

所以,是这样的:

casper.fill('form',
    dataname: 'Anton',
    dataurl: 'http://example.com',
    description: 'testing text...',
    datacolor: 'Yellow'
,1);

但是当然它不起作用,有什么办法可以使用 CasperJS 来完成吗?

4

2 回答 2

1

您可以在提交之前使用它casper.evaluate来添加新option的。select您可以在页面中执行纯 javascript 并根据自己的喜好对其进行操作。

casper.evaluate(function(){
    var o = document.createElement("option");
    o.setAttribute("value", "Yellow"); // what is sent to the server
    o.innerHTML = "Yellow"; // what is shown to the user
    document.querySelector("#color").appendChild(o);
});

casper.fill('form', {
    dataname: 'Anton',
    dataurl: 'http://example.com',
    description: 'testing text...',
    datacolor: 'Yellow'
}, true);

注意:您的语法有点偏离,您忘记了{ ... }casperjs 代码段中的表单字段。

于 2014-06-30T17:08:44.613 回答
1

这实际上是 HTML 不会提供的选项。您不能为下拉菜单提供自定义值。

阅读:带有输入自定义值选项的 HTML 选择表单

但是,您可以放置​​一个隐藏的输入(使用所需的名称)并通过它传递您的自定义颜色。

<input type="hidden" name="datacolor" />
<select id="color" size="1" name="_datacolor">
  <option value="Red">Red</option>
  <option value="Black">Black</option>
  <option value="Blue">Blue</option>
</select>

更改名称<select>并使用fill.

casper.fill('form',{
        dataname: 'Anton',
        dataurl: 'http://example.com',
        description: 'testing text...',
            datacolor: 'mycolor'
}
   , true);

NOTE: More handling is required using client-side JavaScript to fill up the hidden input when a value from dropdown is selected.

于 2013-09-16T07:58:05.153 回答