理解Capybara中的native和send_keys [英] Understanding native and send_keys in Capybara
问题描述
我想了解以下Capybara语法的含义。 native
是什么?什么是 send_keys
用于?此外,我想了解这个特定块的作用。
I am trying to understand the meaning of the following Capybara syntax. What exactly does native
do? What is send_keys
used for? Also, I would like to understand what this particular block does.
within('#step-3') do
recipe_name = first(:xpath, '//*[@id="recipe-name"]').native
recipe_name.clear
recipe_name.send_keys('Email recipe')
end
推荐答案
Capybara使用驱动程序控制浏览器或浏览器模拟器(Rack :: Test,Poltergeist,Selenium等)。每个驱动程序必须实现Capybara定义的API。该API包括Element类及其 .native
方法。 .native
返回驱动程序在内部用于表示DOM元素的对象。 Capybara本身没有任何用于该对象,但一些驱动程序的该对象的实现具有驱动程序特定的方法,可用于测试。
Capybara uses a driver to control a browser or browser simulator (Rack::Test, Poltergeist, Selenium, etc.). Each driver must implement the API that Capybara defines. That API includes the Element class and its .native
method. .native
returns the object that the driver uses internally to represent a DOM element. Capybara itself doesn't have any use for that object, but some drivers' implementations of that object have driver-specific methods that can be useful in tests.
.clear
和 .send_keys
是CSS选择器的DOM元素的驱动程序特定方法, #recipe-name
。推测它是用户键入的元素。我们可以猜测 .clear
是什么。 .send_keys
告诉元素用户已按顺序按下给定字符串中的每个键。
.clear
and .send_keys
are, then, driver-specific methods on the DOM element whose CSS selector is #recipe-name
. Presumably it is an element that the user types into. We can probably guess what .clear
does. .send_keys
tells the element that the user has pressed each of the keys in the given string in order.
使用 .send_keys
而不是仅仅使用 fill_in'#recipe-name'with:'电子邮件配方'
一些浏览器行为,例如Javascript事件,只发生在用户按下一个键。显然, fill_in
以不让浏览器认为任何键被按下的方式将文本放入元素。所以如果你测试一些关于按键事件的事情,你需要使用 .send_keys
。
The point of using .send_keys
rather than just doing fill_in '#recipe-name' with: 'Email recipe'
is that some browser behavior, such as Javascript events, only happens when the user presses a key. Apparently fill_in
puts text into the element in a way that doesn't make the browser think that any keys have been pressed. So if you're testing something that cares about keypress events, you need to use .send_keys
.
在我对关于测试jQuery自动填充的问题的回答中使用 .send_keys
的示例栏位。
I gave an example of using .send_keys
in my answer to a question about testing a jQuery autocomplete field.
这篇关于理解Capybara中的native和send_keys的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!