为了测试目的,我需要立即用textarea
填充string
。{/ p>
set/send_keys
模拟打字,而Sauce Labs
导致超时的速度太慢。
有没有办法立即填充textarea
中的Capybara
?
答案 0 :(得分:3)
TL; DR:使用Javascript / JQuery(.val()
函数)通过value
/ {{1}设置字段.execute_script()
功能。它会自动发送完整的字符串。你有更多细节。
示例:强>
.evaluate_script()
Selenium团队决定采用LOOOONG的方式让它以这种方式工作,因为它实际上模拟用户填充def execute_script(script)
browser.execute(function() {
$('<yourSelectorHere>').val("blablabla");
})
nil
end
/ input
/ {的真实方式{1}} /等。
注意:我在textarea
中编写了命令,但现在也已更新为field
。
确实,使用WebdriverIO
/ Capybara
或.setValue()
/ .set()
方法会对目标元素发出 POST 操作(可能是一个字符数组形式的.keys()
)。见例:
命令: .send_keys()
<强>输出:强>
<input>
一种快速简便的方法是通过browser.setValue('input[connectqa-input="rename-device"]','stackoverflowstackoverflowstack');
/ > browser.setValue('input[connectqa-input="rename-device"]','stackoverflowstackoverflowstack')
{ state: 'pending' }
> [21:52:25] COMMAND POST "/wd/hub/session/3d830ffd-21c6-4e5f-a6b3-4f8a03821991/elements"
[21:52:25] DATA {"using":"css selector","value":"input[connectqa-input=\"rename-device\"]"}
[21:52:25] RESULT [{"ELEMENT":"6"}]
[21:52:25] COMMAND POST "/wd/hub/session/3d830ffd-21c6-4e5f-a6b3-4f8a03821991/element/6/clear"
[21:52:25] DATA {}
[21:52:25] COMMAND POST "/wd/hub/session/3d830ffd-21c6-4e5f-a6b3-4f8a03821991/element/6/value"
[21:52:25] DATA {"value":["s","t","a","c","k","o","v","e","r","f","(21 more items)"],"text":"stackoverflowstackoverflowstack"}
方法继续滥用.val()
JQuery函数:
命令: .execute()
(.executeScript()
)
对于browser.execute(function() { $('input[connectqa-input="rename-device"]').val("dwadawdawdawdawdawdwadawawdadawdawdaw"); })
语法,请参阅此 question 。它涵盖WebdriverIO
和&amp; Capybara
。 (我不想忽视他们的观点)。此外,您应该事先记录方法 here 。
<强>输出:强>
.execute_script()
希望它有所帮助!
答案 1 :(得分:3)
立即执行此操作的唯一方法是使用execute_script
通过JS
element = find('textarea') # however you locate the element
execute_script('arguments[0].value = arguments[1]', element, text_to_set)
注意:这不会触发用户在输入textarea时生成的所有事件