Cucumber/Capybara-如何使用XPath搜索特定按钮?

Cucumber/Capybara-如何使用XPath搜索特定按钮?,cucumber,xpath,capybara,twitter-oauth,Cucumber,Xpath,Capybara,Twitter Oauth,我正试图找出如何用Cucumber/Capybara编写oAuth/Twitter登录特性。部分内容包括访问页面:http://www.twitter.com/sessions/new 填写用户名、密码,然后单击“登录”按钮。最后一步没有按预期工作,该页面的html代码如下所示(法语): 查找(:xpath,…)行工作不正常。我尝试放置'/s'(空格字符的正则表达式),但仍然收到以下错误消息: Unable to find '//button[@class="submit\sbutton"]'

我正试图找出如何用Cucumber/Capybara编写oAuth/Twitter登录特性。部分内容包括访问页面:http://www.twitter.com/sessions/new 填写用户名、密码,然后单击“登录”按钮。最后一步没有按预期工作,该页面的html代码如下所示(法语):

查找(:xpath,…)行工作不正常。我尝试放置'/s'(空格字符的正则表达式),但仍然收到以下错误消息:

 Unable to find '//button[@class="submit\sbutton"]' (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>
如果你试试呢

  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>
相反:

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

find('button.submit.button')
上面是css,因为它是默认的选择器

如果您想要XPath解决方案,请查看,但它更丑陋。

相反:

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

find('button.submit.button')
上面是css,因为它是默认的选择器


如果您希望使用XPath解决方案,请查看,但它更丑陋。

如果您与button的类完全匹配,您可以尝试以下方法:

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

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

如果您与button的类完全匹配,您可以尝试以下操作:

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

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

谢谢。问题是页面上有很多按钮,但第一个是我想点击的按钮。不知道在这种情况下会有什么行为。我尝试了一下,但得到了一个:堆栈级别太深(SystemStackError)错误。顺便说一句,我检查了一个格式良好的页面(你在访问www.twitter.com/sessions/new时看到的页面)。我能建议的最后一件事是给你的按钮一个id,然后按id搜索:(我真的希望我可以:)但我必须发送一张罚单到twitter:)。我不明白你在直接测试twitter。。看看这个工具是否有用。我用它得到了://*[contains(concat(“,@class,”),concat(“,”button“,”)],并通过以下操作对它进行了测试:find(:xpath,“//*[contains(concat(\”,@class,\”),\”),concat(\“,”button\“,\”)))。它仍然找不到:(.它快把我逼疯了!无论如何,+1谢谢你的帮助,如果你对此有其他想法,请不要犹豫回来:)。谢谢。问题是页面上有很多按钮,但第一个是我想点击的按钮。不知道在这种情况下会有什么行为。我尝试了一下,但得到了一个:堆栈级别太深(SystemStackError)错误。顺便说一句,我检查了一个格式良好的页面(你在访问www.twitter.com/sessions/new时看到的页面)。我能建议的最后一件事是给你的按钮一个id,然后按id搜索:(我真的希望我可以:)但我必须发送一张罚单到twitter:)。我不明白你在直接测试twitter。。看看这个工具是否有用。我用它得到了://*[contains(concat(“,@class,”),concat(“,”button“,”)],并通过以下操作对它进行了测试:find(:xpath,“//*[contains(concat(\”,@class,\”),\”),concat(\“,”button\“,\”)))。它仍然找不到:(.它快把我逼疯了!不管怎样,+1寻求帮助,如果你对此有其他想法,请不要犹豫回来:)。一个类不能包含空格,你拥有的是一个包含两个类“submit”和“button”的按钮元素一个类不能包含空格,您拥有的是一个按钮元素,有两个类“submit”和“button”