1

Selenium Webdriver を使用して、ファイルのアップロードをエミュレートしようとしています

ファイル入力フィールドがあります:

<input class="upload_file_field" id="main_image_file" label="false" name="banner_image_file" type="file" />

これをテストで使用すると、ElementNotVisibleError が発生します

@driver.find_element(:id, "main_image_file").send_keys "/Users/dan/Desktop/sample.jpg"

ファイルをアップロードする前に、可視性を変更しようとさえしました:

@driver.execute_script("arguments[0].style.visibility='visible'; arguments[0].style.display='block'; arguments[0].style.height='100px'; arguments[0].style.width='100px'; arguments[0].style.opacity=1; arguments[0].style.zindex=20", @driver.find_element(:id, "main_image_file"))

それでも ElementNotVisibleError が発生します

どんなアドバイスでも大歓迎です

アップデート

さて、要素を非表示にする条件がいくつかあることがわかりました。

  1. 不透明度を 0 にすることはできません
  2. 長さと幅が 0 より大きい必要があります
  3. 可視性を非表示にすることはできません
  4. 表示をなしにすることはできません
  5. transform プロパティは、要素をページの外に移動して、表示されないようにすることができます

私の問題は変換プロパティにありました。これは、入力フィールドをページから完全に変換して非表示にする方法でした。そのため、jQuery ファイルのアップロードを使用して、より適切なスタイルのボタンを使用できました。

その後、

@driver.find_element(:id, "main_image_file").send_keys "/Users/dan/Desktop/sample.jpg"

ファイルのユーザー選択をエミュレートするのに完全にうまく機能しました

4

2 に答える 2

0

なんらかのエラーが原因でページが読み込まれなかった可能性があります。次のコマンドでエラーを出してみてください:

raise(@driver.page_source.to_s)

find_element コマンドの直前?

このようにして、Selenium から見たように、入力フィールドが実際にページ上にあることを確認できます。

于 2013-05-27T21:29:38.210 に答える