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)