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

我在HTML页面上有一个文本字段,用于检查您是否输入了1到365之间的值。如果用户输入的值无效,如非数字字符或不在该范围内的值,则显示弹出。 我在watir wiki上看到有一个select_no_wait方法,用于在从列表中选择无效值时关闭弹出窗口。

处理keyup事件时弹出窗口的好方法是什么? 我是否需要按照select_no_wait方法的实现方式继续进行,或者我们是否可以启动一个不同的进程来解除调用set方法时可能出现的弹出窗口。

在Javascript中带有validate函数的HTML文件的示例示例如下:

   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  365 || num==0)) alert ("Values can only be from to 1 to 365"); } else { alert("Invalid character entered"); document.getElementById('foo').value = ""; } }        

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

对于Watir:

目前有一些操作正在等待页面加载,例如.select.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?" 

我发现包装browser.javascript_dialog.button('OK').clicksleep(3) do browser.javascript_dialog.button('OK').click命令,可以帮助快速浏览器完成命令。