如何向表单中的所有元素发出请求?

时间:2012-05-26 09:24:40

标签: javascript selenium

我有一个表单,包含许多元素(输入,选择,复选框等)。如何对表单内的所有元素应用操作,而不是每个元素明确地执行它?

这是我的代码(在Selenium IDE中):

storeEval |
window.document.getElementsByTagName('form')[0].id = 'myForm';
window.document.defaultView.getComputedStyle(window.document.myForm.getElementsByTagName('*')).getPropertyValue('background-color');
| result

我收到错误:[error] Threw an exception: document.myForm is undefined

我试着这样做:

storeEval |
window.document.getElementsByTagName('form')[0].id = 'myForm';
window.document.defaultView.getComputedStyle(window.document.getElementById('myForm')).getPropertyValue('background-color');

它正常工作。

当我尝试这样做时:

var myForm = document.getElementsByTagName('form')[0];
var children = myForm.childNodes;

我收到错误:[error] Threw an exception: document.myForm is undefined

3 个答案:

答案 0 :(得分:1)

首先,您需要为表单标记设置id属性,以便您可以使用JavaScript轻松识别它。

例如,如果您的表单idmyForm,则可以执行此操作

var children = document.myForm.childNodes;
// or
var children = document.myForm.getElementsByTagName('*');

第一个返回直接后代列表,第二个返回所有后代列表。

编辑:您可以通过id之外的许多其他方式识别表单,但可能会变得很难。试试document.getElementsByTagName('form')。如果您的页面中只有一个表单,则效果很好。

答案 1 :(得分:1)

试试这个:

Command: storeEval
Target : myForm = selenium.browserbot.getCurrentWindow().document.getElementsByTagName("form")[0].childNodes; var colors = new Array(); for (i=0; i < myForm.length; i++) { colors[i] = window.document.defaultView.getComputedStyle(myForm[i]).getPropertyValue('background-color')}; colors.join()
Value  : result

JavaScript代码段selenium.browserbot.getCurrentWindow()获取应用程序的窗口。

答案 2 :(得分:0)

我不确定您为什么要这样做,但为了在表单标记中引用所有子标记,您可以尝试以下操作:

#my_form * {
  color: #369
}

然而,如果您只想引用特定于表单的元素,那么它们就不多了,所以您只需将它们连续指定:

#my_form select, #my_form input, #my_form label, #my_form button {
  color: #369
}

修改即可。如果你想通过javascript引用表单中的所有元素,你正在使用jQuery框架(我强烈推荐),你可以使用相同的选择器:

$('#my_form *').css( ... )
$('#my_form select, #my_form input, #my_form label, #my_form button').css( ... )