【问题标题】:How can I manage slow textarea speed with Watir-Webdriver in Firefox, linux?如何在 Firefox、Linux 中使用 Watir-Webdriver 管理缓慢的 textarea 速度?
【发布时间】:2013-03-12 20:18:50
【问题描述】:

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

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

然后我尝试将native_events设置为false,再次出现错误消息: “用于 # 的未定义方法 `native_events'” 所以我有点困惑。

这是我的全部代码sn-p

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

【问题讨论】:

    标签: performance firefox selenium webdriver watir


    【解决方案1】:

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

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

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

    我确信有同样适用的 Linux 等价物(您需要改用 [:control, 'v']

    【讨论】:

      【解决方案2】:

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

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-17
        • 2013-04-11
        • 1970-01-01
        • 2013-05-01
        相关资源
        最近更新 更多