我试图理解以下Capybara语法的含义。 native
究竟做了什么? send_keys
用于什么?另外,我想了解这个特定块的作用。
within('#step-3') do
recipe_name = first(:xpath, '//*[@id="recipe-name"]').native
recipe_name.clear
recipe_name.send_keys('Email recipe')
end
答案 0 :(得分:12)
Capybara使用驱动程序来控制浏览器或浏览器模拟器(Rack :: Test,Poltergeist,Selenium等)。每个驱动程序必须实现Capybara定义的API。该API包含Element类及其.native
方法。 .native
返回驱动程序在内部使用的对象以表示DOM元素。 Capybara本身对该对象没有任何用处,但是该对象的某些驱动程序实现具有特定于驱动程序的方法,这些方法在测试中非常有用。
.clear
和.send_keys
是DOM元素的选择器为#recipe-name
的特定于驱动程序的方法。据推测,它是用户输入的元素。我们可以猜测.clear
的作用。 .send_keys
告诉元素用户按顺序按下了给定字符串中的每个键。
使用.send_keys
而不是仅仅执行fill_in '#recipe-name' with: 'Email recipe'
是指某些浏览器行为(例如Javascript事件)仅在用户按下某个键时发生。显然fill_in
以一种不会让浏览器认为已经按下任何键的方式将文本放入元素中。因此,如果您正在测试关键按键事件的内容,则需要使用.send_keys
。
我举了一个在my answer to a question about testing a jQuery autocomplete field中使用.send_keys
的例子。