Cucumber 如何在特定选择器中使用expect?

Cucumber 如何在特定选择器中使用expect?,cucumber,capybara,Cucumber,Capybara,我正在学习使用capybara、cucumber和webdriver 我正在使用expect进行测试,我通常使用expect(page)。让_选择器('p','some cool text')查找一个元素,但有时它碰巧有多个类似的选择器,有时它会在一段时间后加载 为了简化我要说的内容,我将组合一个html方案来演示我要查找的内容 setTimeout(函数(){ document.getElementById('alpha').innerHTML='some cool text'; },300

我正在学习使用
capybara
cucumber
webdriver

我正在使用expect进行测试,我通常使用
expect(page)。让_选择器('p','some cool text')
查找一个元素,但有时它碰巧有多个类似的选择器,有时它会在一段时间后加载

为了简化我要说的内容,我将组合一个html方案来演示我要查找的内容

setTimeout(函数(){
document.getElementById('alpha').innerHTML='some cool text';
},3000)
将加载此文本 3s后加载的文本

我不想找到的类似文本


some cool text

您编写的语句没有达到预期效果,因为您只是将“some cool text”作为参数传递,而不是作为文本选项传递。你想要的是

expect(page).to have_selector('p#alpha', text: 'some cool text')
它最多将等待
Capybara。对于id为“alpha”且包含文本“some cool text”的p元素,默认等待时间为\u max\u wait\u time
秒。默认情况下,
Capybara.default\u max\u wait\u time
为2秒,因此,如果您的页面上有许多事情需要3秒以上的时间才能发生,您可能需要增加该时间。如果只有这一个,您可以通过传递
wait
选项来延长特定呼叫的最大等待时间

expect(page).to have_selector('p#alpha', text: 'some cool text', wait: 5)
另外,如果我是你,当你知道你在使用css时,我会使用
have_css
而不是
have_selector

expect(page).to have_css('p#alpha', text: 'some cool text', wait: 5)