了解Capybara中的native和send_keys

Man*_*eet 4 cucumber capybara

我试图理解以下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
Run Code Online (Sandbox Code Playgroud)

Dav*_*uth 12

Capybara使用驱动程序来控制浏览器或浏览器模拟器(Rack :: Test,Poltergeist,Selenium等).每个驱动程序必须实现Capybara定义的API.该API包括Element类及其.native方法..native返回驱动程序在内部使用的对象以表示DOM元素.Capybara本身对该对象没有任何用处,但是该对象的某些驱动程序实现具有特定于驱动程序的方法,这些方法在测试中很有用.

.clear.send_keys是的话,DOM元素,其CSS选择是特定驱动程序的方法#recipe-name.据推测,它是用户输入的元素.我们可以猜到是什么.clear..send_keys告诉元素用户按顺序按下了给定字符串中的每个键.

使用.send_keys而不仅仅是执行的fill_in '#recipe-name' with: 'Email recipe'一点是,某些浏览器行为(例如Javascript事件)仅在用户按下某个键时发生.显然fill_in,文本以一种不会让浏览器认为已按下任何键的方式将文本放入元素中.因此,如果您正在测试关键按键事件的内容,则需要使用.send_keys.

我举了一个例子,.send_keys我对一个关于测试jQuery自动完成字段的问题的回答中使用.