1

我正在使用 Ruby 1.8.7、Watir-Webdriver 0.6.1、Arch Linux、Firefox 14

我在这个主题中阅读了很多答案和示例,但没有一个对我有用。当我想将一大段数据(只有大约 15 行文本)粘贴到 textarea 中时,速度非常慢。因为我不想输入仿真,所以我想要最大可用速度,所以我尝试设置变量“browser.speed = :zippy”,但它似乎在 Watir-Webdriver 中不起作用,只出现一条错误消息: “未定义的方法 `speed=' for #”

然后我尝试将native_events设置为false,再次出现错误消息:“undefined method `native_events' for #”所以我有点困惑。

这是我的整个代码片段

require 'rubygems'
require 'watir-webdriver'
require 'xmlsimple'
default_profile = Selenium::WebDriver::Firefox::Profile.from_name "default"
default_profile.native_events = false
default_profile['javascript.enabled']=false
browser = Watir::Browser.new :ff, :profile => default_profile
browser.speed = :zippy

第 5 行、第 6 行和第 8 行都抛出错误消息。

最后我尝试编辑 text_field.rb ,因为它在这个答案(http://stackoverflow.com/questions/5000164/firewatir-textfield-set-very-slow)中提到,但它在一个 .gem 文件和一个tar.gz. 我解压缩但找不到相关行:

# encoding: utf-8
module Watir
  class TextField < Input
    include UserEditable

    attributes Watir::TextArea.typed_attributes
    remove_method :type # we want Input#type here, which was overriden by TextArea's attributes

    private

    def locator_class
      TextFieldLocator
    end

    def selector_string
      selector = @selector.dup
      selector[:type] = '(any text type)'
      selector[:tag_name] = "input or textarea"
      selector.inspect
    end
  end

  module Container
    def text_field(*args)
      TextField.new(self, extract_selector(args).merge(:tag_name => "input"))
    end

    def text_fields(*args)
      TextFieldCollection.new(self, extract_selector(args).merge(:tag_name => "input"))
    end
  end # Container

  class TextFieldCollection < InputCollection
    private

    def locator_class
      TextFieldLocator
    end

    def element_class
      TextField
    end
  end # TextFieldCollection
end
4

2 回答 2

1

对于大字符串,我建议将文本放入系统剪贴板,然后粘贴到文本字段中。

在 OS X 上,pbcopy命令行实用程序可用于:

  IO.popen("pbcopy", "w") { |io| io << long_string }
  browser.text_field.send_keys([:command, 'v'])

我敢肯定,有一些 Linux 等价物也能很好地工作(你需要[:control, 'v']改用它。

于 2012-08-22T11:18:36.780 回答
0

我在尝试使用 watir-webdriver 运行 IE 时遇到了同样的问题。我设法通过编辑 \Ruby193\lib\ruby\gems\1.9.1\gems\watir-webdriver-0.6.2\lib\watir-webdriver\browser.rb 文件并在之前添加它来让它运行得更快一点def 初始化(浏览器 = :firefox,*args):

# Run fast
$FAST_SPEED = ARGV.delete('-f')

 @@speed = $FAST_SPEED ? :fast : :slow
    def self.speed
      return :fast if $FAST_SPEED
      @@speed
    end
    def self.speed= x
      $FAST_SPEED = nil
      @@speed = x
    end




    def initialize_options

      self.speed = browser.speed

      @ole_object = nil
      @page_container = self
      @error_checkers = []

      @url_list = []
    end

     def speed= how_fast
      case how_fast
      when :zippy then
        @typingspeed = 0
        @pause_after_wait = 0.01
        @type_keys = false
        @speed = :fast
      when :fast then
        @typingspeed = 0
        @pause_after_wait = 0.01
        @type_keys = true
        @speed = :fast
      when :slow then
        @typingspeed = 0.08
        @pause_after_wait = 0.1
        @type_keys = true
        @speed = :slow
      else
        raise ArgumentError, "Invalid speed: #{how_fast}"
      end
    end

    def speed
      return @speed if @speed == :slow
      return @type_keys ? :fast : :zippy
    end

    # deprecated: use speed = :fast instead
    def set_fast_speed
      self.speed = :fast
    end

    # deprecated: use speed = :slow instead    
    def set_slow_speed
      self.speed = :slow
    end

之后我修改了 def goto(uri) :

def goto(uri)
  uri = "http://#{uri}" unless uri =~ URI.regexp

  @driver.navigate.to uri
  run_checkers
  initialize_options

  url
end

它工作得更快一些,我不知道它是否是最好的解决方案,因为我刚开始使用 watir。

希望能帮助到你。

于 2013-03-12T12:18:50.277 回答