ruby – 处理在keyup事件上发生的javascript弹出窗口

我在 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>

我真的很感激关于这个问题的任何指示.提前致谢.

解决方法

对于Watir:

目前有一些操作正在等待页面加载,例如.click,.select,因为在执行此类操作后,页面通常会通过回发或表单发布更新. _no_wait变体存在于那些,作为一种告诉脚本继续进行而不等待弹出窗口发生时发生页面加载的方法.

目前.set没有等待页面加载逻辑(据我所知),因此没有_no_wait方法的变体.所以你可以直接从设置值,到寻找弹出窗口.

请注意,如果在使用.set后没有看到弹出窗口,则可能需要触发’onkeyup’事件以触发客户端脚本.还要确定它真的是一个JS弹出窗口,还有很多其他方法可以做一些看起来像JS弹出窗口的东西,但实际上只是像div这样的东西.

由于这是一个Javascript Popup,你应该能够通过类似于Watir Wiki中的示例的代码来摆脱它

browser.javascript_dialog.button('OK').click

对于watir-webdriver

如果您使用的是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" }

请注意,这些示例非常直接来自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

在每个例子中,在’结束’之后发表评论?如果将循环的输出分配给变量,那就是你得到的

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?"

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...