Cucumber/水豚——如何使用XPath搜索特定的按钮



我想弄清楚如何写一个oAuth/Twitter登录功能与Cucumber/Capybara。其中一部分包括访问页面:http://www.twitter.com/sessions/new并填写用户名,密码,然后点击"登录"按钮。最后一步没有像预期的那样工作,该页面的html代码看起来像这样(位于法语中):

<fieldset class="textbox"> 
  <label class="username"> 
    <span>Nom d'utilisateur ou e-mail</span> 
    <input type="text" value="" name="session[username_or_email]" autocomplete="on" /> 
  </label> 
  <label class="password"> 
    <span>Mot de passe</span> 
    <input type="password" value="" name="session[password]" /> 
  </label> 
</fieldset> 
  <fieldset class="subchck"> 
  <button type="submit" class="submit button">Se connecter</button> 

我在web中定义了这样的步骤。步骤(注意,我没有使用默认的capybara驱动程序,而是使用capybara-mechanize):

Given /^I sign in$/ do
    visit 'http://twitter.com/sessions/new'
    fill_in "Username or email", :with => 'xxx'
    fill_in "Password", :with => 'xxx'
    find(:xpath, 'button[@class="submit button"]')
    ....
end

find(:xpath,…)行不能正常工作。我试着放一个'/s'(正则表达式为空格字符),但我仍然得到这个错误信息:

 Unable to find '//button[@class="submitsbutton"]' (Capybara::ElementNotFound)

我也试过:

xpath_for("submit button")

但是我得到一个堆栈级别太深的错误!

我不是真的有信心我的regex/xpath元素查找技能,所以请告诉我我的代码有什么问题,我怎么能找到那个按钮?

非常感谢你的帮助!

[编辑]

默认选择器是:css。改成:xpath:

Capybara.default_selector = :xpath

如果你尝试

  click_on "Se connecter"

编辑:尝试在nokogiri(因为水豚使用nokogiri)它不适合我,当我使用你的HTML是(意思是它甚至没有看到文档中的元素)。但是当我把所有东西都包含在一个根节点中时,它就工作了。不知道是否有一个问题与你的网页HTML或其他…对于结构良好的页面,它"应该"工作。不知道这有多大帮助

<html>
<fieldset class="textbox"> 
  <label class="username"> 
    <span>Nom d'utilisateur ou e-mail</span> 
    <input type="text" value="" name="session[username_or_email]" autocomplete="on" /> 
  </label> 
  <label class="password"> 
    <span>Mot de passe</span> 
    <input type="password" value="" name="session[password]" /> 
  </label> 
</fieldset> 
  <fieldset class="subchck"> 
  <button type="submit" class="submit button">Se connecter</button> 
</html>
对于这个HTML,我可以使用xpath
xpath('//button')

相反:

find(:xpath, 'button[@class="submit button"]')

你应该有:

find('button.submit.button')

上面是css,因为它是默认的选择器。

如果您想使用XPath解决方案,请查看https://stackoverflow.com/a/11752824/507018,但它更难看。

如果您与按钮<button class="submit button">的类完全匹配,您可以尝试以下操作:

find(:xpath, '//button[@class="submit button"]')

确保您没有忘记搜索字符串开头的双斜杠

相关内容

  • 没有找到相关文章

最新更新