如何在水豚中即时设置/发送一个textarea

时间:2017-05-25 18:21:55

标签: selenium capybara saucelabs

为了测试目的,我需要立即用textarea填充string。{/ p>

set/send_keys模拟打字,而Sauce Labs导致超时的速度太慢。

有没有办法立即填充textarea中的Capybara

2 个答案:

答案 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时生成的所有事件