san*_*rew 81 ruby bdd ruby-on-rails cucumber capybara
我正在使用许多jQuery插件,它经常创建没有id或其他标识属性的DOM元素,并且在Capybara中获取它们的唯一方法(例如用于点击) - 是为了让他们的邻居(其祖先的另一个孩子)首先.但我没有找到任何地方,例如Capybara支持这样的事情:
find('#some_button').parent.fill_in "Name:", :with => name
Run Code Online (Sandbox Code Playgroud)
?
Pas*_*auf 106
我真的觉得jamuraa的答案很有帮助,但是在我的情况下,使用完整的xpath给了我一个字符串的噩梦,所以我很高兴地利用了在Capybara中连接find的能力,允许我混合css和xpath选择.您的示例将如下所示:
find('#some_button').find(:xpath,".//..").fill_in "Name:", :with => name
Run Code Online (Sandbox Code Playgroud)
Capybara 2.0更新:find(:xpath,".//..")很可能会导致Ambiguous match错误.在这种情况下,请first(:xpath,".//..")改用.
jam*_*raa 38
用capybara和CSS没办法做到这一点.我过去曾使用XPath来实现这个目标,它确实有一种方法来获取父元素并得到Capybara的支持:
find(:xpath, '//*[@id="some_button"]/..').fill_in "Name:", :with => name
Run Code Online (Sandbox Code Playgroud)
B S*_*ven 29
我发现以下内容确实有效:
find(:xpath, '..')
Run Code Online (Sandbox Code Playgroud)
Capybara已更新以支持此功能.
https://github.com/jnicklas/capybara/pull/505
Ben*_*avi 10
如果你偶然发现了这个试图弄清楚如何找到任何父节点(如在祖先中)节点(如@vrish88对@Pascal Lindelauf的答案中的暗示所示):
find('#some_button').find(:xpath, 'ancestor::div[@id="some_div_id"]')
Run Code Online (Sandbox Code Playgroud)
这个答案与如何操作同级元素有关,我认为这是原始问题所暗示的
您的问题假设只需稍作调整即可。如果动态生成的字段看起来像这样并且没有 id:
<div>
<input></input>
<button>Test</button>
</div>
Run Code Online (Sandbox Code Playgroud)
您的查询将是:
find('button', text: 'Test').find(:xpath, "..").find('input').set('whatever')
Run Code Online (Sandbox Code Playgroud)
如果动态生成的输入确实附带了一个 id 元素(尽管在 angular 中要小心这些,但它们不会根据添加和删除元素而改变),它会是这样的:
find('button', text: 'Test').find(:xpath, "..").fill_in('#input_1', with: 'whatever')
Run Code Online (Sandbox Code Playgroud)
希望有帮助。
| 归档时间: |
|
| 查看次数: |
25849 次 |
| 最近记录: |