watir-webdriver 设置值 text_field 非常慢
watir-webdriver setting value to text_field very slow
使用 watir-webdriver 将大文本设置为 text_field 大约需要 4-5 秒。我也尝试过值方法,但它仍然很慢。
我在 Windows 上使用剪贴板 gem 和 send_keys [:control, "v"] 找到了解决此问题的方法,但是这对 headless 并不适用linux。对此有何建议?
输入大值可能会很慢,因为一次输入一个字符。这是为了触发每个关键事件。
假设您的应用程序不关心输入字段触发的事件,您可以直接通过JavaScript设置值。
Watir 6.8+
Watir 现在提供 #set!
方法来执行此操作:
long_text = "abcde fghijk lmnop qrstuv"
browser.text_field.set!(long_text)
Watir 6.8 之前
在 v6.8 之前(最初回答这个问题时),这需要通过 #execute_script
:
手动完成
long_text = "abcde fghijk lmnop qrstuv"
the_field = browser.text_field
p the_field.value
#=> ""
browser.execute_script("arguments[0].value = '#{long_text}';", the_field)
p the_field.value
#=> "abcde fghijk lmnop qrstuv"
性能比较
即使是这么小的文字,您也可以看出 execute_script
快得多。一个基准:
n = 100
Benchmark.bm do |x|
x.report("execute_script:") { n.times { browser.execute_script("arguments[0].value = '#{long_text}';", the_field) } }
x.report("set:") { n.times { the_field.set(long_text) } }
end
结果:
user system total real
execute_script: 0.874000 0.609000 1.483000 ( 6.690669)
set: 2.199000 1.295000 3.494000 ( 22.384238)
使用 watir-webdriver 将大文本设置为 text_field 大约需要 4-5 秒。我也尝试过值方法,但它仍然很慢。
我在 Windows 上使用剪贴板 gem 和 send_keys [:control, "v"] 找到了解决此问题的方法,但是这对 headless 并不适用linux。对此有何建议?
输入大值可能会很慢,因为一次输入一个字符。这是为了触发每个关键事件。
假设您的应用程序不关心输入字段触发的事件,您可以直接通过JavaScript设置值。
Watir 6.8+
Watir 现在提供 #set!
方法来执行此操作:
long_text = "abcde fghijk lmnop qrstuv"
browser.text_field.set!(long_text)
Watir 6.8 之前
在 v6.8 之前(最初回答这个问题时),这需要通过 #execute_script
:
long_text = "abcde fghijk lmnop qrstuv"
the_field = browser.text_field
p the_field.value
#=> ""
browser.execute_script("arguments[0].value = '#{long_text}';", the_field)
p the_field.value
#=> "abcde fghijk lmnop qrstuv"
性能比较
即使是这么小的文字,您也可以看出 execute_script
快得多。一个基准:
n = 100
Benchmark.bm do |x|
x.report("execute_script:") { n.times { browser.execute_script("arguments[0].value = '#{long_text}';", the_field) } }
x.report("set:") { n.times { the_field.set(long_text) } }
end
结果:
user system total real
execute_script: 0.874000 0.609000 1.483000 ( 6.690669)
set: 2.199000 1.295000 3.494000 ( 22.384238)