如何摆脱Capybara(JRuby)中的ElementNotFound错误

时间:2012-06-19 11:37:58

标签: jruby capybara

我是水豚和jruby的新手。作为我的一个实践,我使用way2sms网站。单击发送短信后,控件无法找到输入电话号码的元素。

require 'rubygems'
 require 'capybara'
 require 'capybara/dsl'
 require 'selenium-webdriver'
 include Capybara::DSL

  Capybara.run_server = false
  Selenium::WebDriver::Firefox.path = "C:/Program Files/Mozilla Firefox/firefox.exe"
  Capybara.default_driver = :selenium
  visit "http://www.way2sms.com"
  page.find(:xpath, '/html/body/form/div/div/div[2]/div/div/div[2]/a').click

    fill_in('username',:with=>"username")
    fill_in('password',:with=>"password")
    click_button('button')

    page.find(:xpath, '//*[@id="quickclose1"]').click
    page.find(:xpath, '//*[@id="quicksms"]').click

    page.fill_in('MobNo',:with=>"mobile number")
    page.fill_in('textArea',:with=>"Some message5")
    page.find(:xpath, '//*[@id="Send"]').click
    click_button('Send SMS')

当我运行它时,它显示以下错误,

Capybara::ElementNotFound: cannot fill in, no text field, text area or password
field with id, name, or label 'MobNo' found.

任何人都可以帮我解决这个问题...

1 个答案:

答案 0 :(得分:0)

如果没有更多信息,我的猜测是其中一个导致手机号码字段可能通过ajax出现?

 page.find(:xpath, '//*[@id="quickclose1"]').click
 page.find(:xpath, '//*[@id="quicksms"]').click

你用@javascript运行你的场景吗?这将是我首先尝试的。 由于默认驱动程序是rack_test,并且无法处理任何javascript。并且为了让capybara使用jlen驱动程序,它是selenium,默认情况下,你需要使用@javascript在黄瓜中标记你的场景。或者使用:js =>如果您使用RSpec,则为true。在capybara自述文件here

中阅读

问题的根源是没有id为'MobNo'的输入。您确定它是输入字段的正确ID吗? 您还可以通过在失败的步骤之前添加“然后显示页面”步骤来查看网页黄瓜/水豚的样子。