1

Ruby 1.8.7、Watir-Webdriver 0.6.1、Arch Linux、Firefox 14 を使用しています。

このトピックで多くの回答と例を読みましたが、どれもうまくいきませんでした。大きなデータ (約 15 行のテキスト) をテキストエリアに貼り付けたい場合、非常に遅くなります。タイピング エミュレーションが必要ないため、利用可能な最大速度が必要なので、変数 "browser.speed = :zippy" を設定しようとしましたが、Watir-Webdriver では機能しないようで、エラー メッセージのみが表示されます。 「未定義のメソッド `speed=' for #」

次に、native_events を false に設定しようとしましたが、エラー メッセージが再び表示されます。「未定義のメソッド `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 行目はすべてエラー メッセージをスローします。

最後に、この回答 (http://stackoverflow.com/questions/5000164/firewatir-textfield-set-very-slow) に記載されているように text_field.rb を編集しようとしましたが、.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 initialize(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から始めたので、それが最良の解決策であるかどうかわかりません。

それが役に立てば幸い。

于 2013-03-12T12:18:50.277 に答える