我有这个规格:
checklist_item_element.fill_in 'description', with: 'Changed description'
page.find('body').click # to blur the input field
checklist_item.reload
expect(checklist_item.description).to eq('Changed description')
我有这个模板:
v-text-field.habit-card__habit-checklist__checklist-item-description(
name="description"
v-model="checklistItem.description"
data-vv-name="description"
@change="saveChecklistItem(checklistItem)"
)
我正在使用Selenium的webkit
驱动程序。最后一次expect
始终失败,因为description
仍然是旧值,而不是Changed description
。
如果我使用Chrome浏览器自行执行相同的操作,则可以正常使用。
我猜@change
未被触发。我是对的,如果是的话,我能做些什么呢?
答案 0 :(得分:1)
当这些方法返回时,浏览器操作(fill_in
,click
等触发的任何操作通常都无法完成,因为Capybara和驱动程序无法知道哪些操作将会或不会再触发页面上的操作,以及触发的操作是否与测试人员正在做的任何事情相关。这就是为什么所有Capybaras查找器/匹配器都具有内置的等待/重试行为,以便与页面中发生的更改同步。这也是为什么在功能测试中进行直接数据库检查通常是一个糟糕的代码味道,因为它没有提供任何与页面同步的方法。
如果您确实需要(或坚持做)直接数据库检查,那么您需要在它们之前(在触发它们的浏览器操作之后)提出期望,无论任何可视页面更改向用户指示操作已完成。如果没有可视页面更改(通常表示不良用户体验),那么您真正要做的就是休眠一段时间(或者可能使用其中一个提供通用等待规范匹配器的gem(waiting_rspec_matchers等))。 / p>