我在尝试点击单选按钮时遇到了麻烦。
HTML代码为:
function radioButtonFormatter(el, oRecord, oColumn, oData) {
var checkFalse='checkFalse';
var check='check' ;
el.innerHTML="<input type='radio' name='table-radiobutton' value='" + oData + "' onclick='disableButtons(this.checked, this.type)' />";
}
我想使用类似的东西:
browser.radio(:value => "oData").click
但它不起作用......我也尝试使用一段文字作为参考,但它也不起作用。
你们对如何表演有任何建议吗? 非常感谢!
答案 0 :(得分:3)
但它不起作用
是。当页面定义像这样的js函数时:
function radioButtonFormatter(el, oRecord, oColumn, oData) {
var checkFalse='checkFalse';
var check='check' ;
el.innerHTML="<input type='radio' name='table-radiobutton' value='" + oData + "' onclick='disableButtons(this.checked, this.type)' />";
}
...它不会导致函数执行。如果您执行了这个ruby程序:
def greet
puts 'hello'
end
...你想知道为什么没有输出?同样,在执行js函数之前,单选按钮不存在。
接下来,这个:
browser.radio(:value => "oData").click
查找具有以下属性的单选按钮:
<radio value="oData" ...>
你想要的是:
browser.radio(:value => oData).click
但是,这意味着您必须创建一个名为oData的变量,并为其赋值:
oData = "something here"
browser.radio(:value => oData).click
在ruby程序中编写变量名oData并不能让它与javascript程序中名为oData的变量具有相同的值。
以下是您可以做的事情:
3.htm:
<!DOCTYPE html>
<html>
<head>
<title>index.html</title>
<script type="text/javascript">
function disableButtons(x, y) {
document.getElementById("disable-info").innerHTML = x + " " + y;
}
function radioButtonFormatter(el, oData) {
var checkFalse='checkFalse';
var check='check' ;
el.innerHTML="<input type='radio' name='table-radiobutton' value='" + oData + "' onclick='disableButtons(this.checked, this.type)' />";
}
</script>
</head>
<body>
<div>Hello world</div>
<div id="div1"></div>
<div id="disable-info"</div>
</body>
</html>
。
require 'watir-webdriver'
b = Watir::Browser.new :firefox
b.goto "http://localhost:8080/3.htm"
b.execute_script(
"radioButtonFormatter(
document.getElementById('div1'), 42
)"
)
b.radio(:value => "42").click
或者,如果某个事件触发了radioButtonFormatter()函数,则可以使用watir-webdriver触发该事件:
<!DOCTYPE html>
<html>
<head>
<title>index.html</title>
<script type="text/javascript">
function disableButtons(x, y) {
document.getElementById("disable-info").innerHTML = x + " " + y;
}
function radioButtonFormatter(el, oData) {
var checkFalse='checkFalse';
var check='check' ;
el.innerHTML="<input type='radio' name='table-radiobutton' value='" + oData + "' onclick='disableButtons(this.checked, this.type)' />";
}
window.onload = function() {
document.getElementById('greeting').onclick = function() {
radioButtonFormatter(document.getElementById('div1'), 42);
}
}
</script>
</head>
<body>
<div id="greeting">Hello world</div>
<div id="div1"></div>
<div id="disable-info"</div>
</body>
</html>
。
require 'watir-webdriver'
b = Watir::Browser.new :firefox
b.goto "http://localhost:8080/3.htm"
b.div(id: "greeting").when_present.click #This causes radioButtonFormatter() to execute
b.radio(value: "42").when_present.click
但是这不允许你控制oData的值。您必须查看js以确定oData的值是什么,然后在ruby脚本中使用该值。
答案 1 :(得分:0)
试试这个:
el.innerHTML="<input id='rad' type='radio' name='table-radiobutton' value='val' />radio";
var rad = document.getElementById("rad");
rad.onclick=function(){
alert('clicked');
};