cha*_*nya 6 ruby watir watir-webdriver
我在HTML页面上有一个文本字段,用于检查您是否输入了1到365之间的值.如果用户输入的值无效,如非数字字符或不在范围内的值,则显示弹出.我在watir wiki上看到有一个select_no_wait方法,用于在从列表中选择无效值时关闭弹出窗口.
处理keyup事件时弹出窗口的好方法是什么?我是否需要按照select_no_wait方法的方式继续执行,或者我们是否可以启动一个不同的进程,该进程将忽略调用set方法时可能出现的弹出窗口.
在Javascript中带有validate函数的HTML文件的示例示例如下:
<html>
<head>
<script type="text/javascript">
var num = 0
function validate(e)
{
var charPressed = String.fromCharCode(e.keyCode);
if(charPressed >= '0' && charPressed<= '9')
{
num = parseInt(document.getElementById('foo').value);
if ((document.getElementById('foo').value).length <= 3 && (num > 365 || num==0))
alert ("Values can only be from to 1 to 365");
}
else
{
alert("Invalid character entered");
document.getElementById('foo').value = "";
}
}
</script>
</head>
<body>
<label id="code"> Sample </label>
<input type="text" id ="foo" onkeyup="validate(event)" maxLength="3"/>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我真的很感激关于这个问题的任何指示.提前致谢.
有一些行动,目前等待页面加载,例如.click,.select因为这种行动后的页面通过回发或形式后经常更新.这些_no_wait变体存在,作为一种告诉脚本继续进行而不等待弹出窗口发生时发生页面加载的方法.
目前.set没有等待页面加载逻辑(据我所知),因此没有_no_wait方法的变体.所以你可以直接从设置值,到寻找弹出窗口.
请注意,如果您在使用后没有看到弹出窗口.set,则可能需要触发'onkeyup'事件以触发客户端脚本.还要确定它真的是一个JS弹出窗口,还有很多其他方法可以做一些看起来像JS弹出窗口的东西,但实际上只是像div这样的东西.
由于这是一个Javascript Popup,你应该能够通过类似于Watir Wiki中的示例的代码来摆脱它
browser.javascript_dialog.button('OK').click
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Watir-Webdriver,那么事情会有所不同. 我在这里详细介绍一下,因为这些信息不太容易获得(还)
Webdriver有一个Alerts API,Watir-Webdriver有一个警报助手,利用它,用几种不同的方法来处理各种风格的javascript弹出窗口.这些方法在RDoc for watir-webdriver中描述,在主watir类下查找'alerthelper'.这些是那里给出的例子.
require "watir-webdriver/extensions/alerts" #add to require section at top of script)
browser.alert do
browser.button(:value => "Alert").click
end #=> "the alert message"
browser.confirm(true) do
browser.button(:value => "Confirm").click
end #=> "the confirm message"
browser.prompt("hello") do
browser.button(:value => "Prompt").click
end #=> { :message => "foo", :default_value => "bar" }
Run Code Online (Sandbox Code Playgroud)
请注意,这些示例非常直接来自alerthelper代码的rspec测试.因此,如果不了解这一特定的细节,它们可能对您没有任何意义. 循环内的单击方法是使警报显示的操作. 测试网页有三个按钮,其值为Alert,Confirm,Prompt,这会导致弹出窗口显示为针对该页面运行的测试.
要在代码中使用这些东西,请用脚本中的任何操作替换该中间行导致弹出窗口. 例如,在我的一个脚本中,我单击一个按钮删除用户的信用卡,并弹出一个确认对话框.所以我的代码最终看起来像这样(请注意,此代码适用于watir和watir-webdriver,$ webdriver设置为true或false,具体取决于正在使用的代码.
if $webdriver #watir-webdriver
$browser.confirm(true) do
$browser.div(:id => 'credit_cards').link(:text =>'Delete').click
end
else #watir
$browser.div(:id => 'credit_cards').link(:text =>'Delete').click_no_wait
$browser.javascript_dialog.button('OK').click
end
Run Code Online (Sandbox Code Playgroud)
在每个例子中,在'结束'之后发表评论?如果将循环的输出分配给变量,那就是你得到的
confirm_message = browser.confirm(true) do
browser.link(:text => "Add Lasers").click
end
puts confirm_message
> "do you really want to put lasers on sharks?"
Run Code Online (Sandbox Code Playgroud)