0

我有一个包含许多元素(输入、选择、复选框等)的表单。如何在不对每个元素显式执行的情况下将操作应用于表单内的所有元素?

这是我的代码(在 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

4

3 回答 3

1

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

例如,如果您的表单idmyForm,您可以这样做

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

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

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

于 2012-05-26T09:45:51.957 回答
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()获取应用程序的窗口。

于 2012-05-27T10:38:02.677 回答
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( ... )
于 2012-05-26T09:38:28.573 回答