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