【问题标题】:Text fields are not being filled in correctly in watir-webdriver未在 watir-webdriver 中正确填写文本字段
【发布时间】:2012-02-02 14:15:49
【问题描述】:

我最近决定在我的测试脚本中从使用 watir 切换到使用 watir-webdriver。除了这种奇怪的行为外,它工作得很好。当涉及具有多个文本字段的表单时,例如名字字段和姓氏字段,它会错误地填写这些内容。它通常填写名字,然后填写姓氏的一两个字母,然后跳回名字字段并将姓氏的其余部分附加到名字上。

例如名字/姓氏文本字段。我编写脚本以填写 Jim 的名字和 Johnson 的姓氏。当我运行脚本时,我将以 Jimhnson 作为名字,以 Jo 作为姓氏。就像它决定跳回姓氏字段中间的名字字段一样。这是我在使用 Watir 时从未经历过的事情,并且到处搜索类似的实例,但没有运气。希望有人可以提供帮助。这是我正在使用的代码示例。我不想使用“sleep 1”,但发现它是防止这种奇怪行为的唯一方法。

 def fill_in_applicant_name(fName, lName)
  puts "Fills in the applicant first name"
  @@b.text_field(:id, "ApplicantFirstName").set(fName)

  #sleep 1

  puts "Fills in the applicant last name"
  @@b.text_field(:id, "ApplicantLastName").set(lName)
end

【问题讨论】:

  • 最好将页面 html 代码包含在问题和您的代码中。

标签: watir watir-webdriver


【解决方案1】:

如果您需要 sleep 语句,听起来好像在填充 text_field 后触发了一些 AJAX 或 Javascript?由于您明确命名了正在填写的 text_fields,因此我真的没有其他理由来解释为什么文本应该在一个框中结束。

变量名周围的括号是多余的,不太像 Ruby。它们可以被移除。

我对这个方法的方法是使用 when_present 以确保文本字段是可访问的。

def fill_in_applicant_name(first, last)
 @browser.text_field(:id, "First").when_present.set first
 @browser.text_field(:id, "Last").when_present.set last
end

如果收到错误,请根据需要使用其他等待方法

Watir::Watir.until(30) { @browser.text_field(:id, "Last").visble? }

如果这不起作用,您可以从您正在测试的页面中发布一些代码来帮助我们吗?

【讨论】:

  • 谢谢亚当。不幸的是,我尝试了 when_present 和其他等待方法,看看它是否有效并且它仍然有效。到目前为止,唯一的解决方法是将 sleep 语句放入其中。等待元素出现不是休眠,而是在测试字段之间暂停脚本。出于某种原因,这可以正常工作,并且字段填写正确。
  • 再一次,我们可以看到页面 HTML 吗?您的 Ruby 和 Watir/Webdriver 版本也会有所帮助。如果没有某种 AJAX 或其他会改变这些文本字段值的动态元素,我想不出 Ruby/Watir 会导致这种情况的原因。
  • 我为上述评论中的代码道歉。我是新手,还没有弄清楚如何在评论中添加代码。希望以上内容有意义。
  • 我记得当我最初从 Watir 切换到 Watir-webdriver 时遇到过这样的问题。不幸的是,我记得这也是解决方案。我知道有问题的字段(基本注册表单)在填写期间或之后没有特殊的 javascript 触发,但可能有四分之一会在输入其中一个字段的过程中切换字段。在禁用原生事件的情况下,它会完成数百次表单而不会失败。
  • 如果浏览器有自动填充类型选项,您可以尝试禁用它并查看是否可以解决问题。我完全不确定禁用原生事件可能会带来什么不利影响。
【解决方案2】:

好吧,在关闭 Firefox 的本机事件的情况下创建和运行 watir-webdriver 测试已经有一周左右的时间了。这绝对是问题的答案。自从关闭本地事件以来,我没有出现过这种异常行为。测试/检查运行良好,我只有一个小问题。该应用程序的一个页面会出现一条弹出消息,并且在您继续下一页时永远不会消失。这有点烦人,但它不会以任何方式影响测试。谢谢各位的意见。这是再次关闭原生事件的代码。

profile = Selenium::WebDriver::Firefox::Profile.from_name "webdriver"
profile.native_events = false
browser = Watir::Browser.new :firefox, :profile => profile

【讨论】:

  • 提示:不要使用Profile.from_name。这可以防止您的脚本在没有“webdriver”配置文件的机器上运行。相反,只需执行Profile.new
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多