1

私は今本当に立ち往生しています。テキストを送信したい < p> タグがある iframe がありますが、送信できません。

HTML:

<iframe id="edit-field-verdict-0-value_ifr" frameborder="0" src="javascript:""" style="width: 100%; height: 100px;">
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  <html>
    <head xmlns="http://www.w3.org/1999/xhtml">
    <body id="tinymce" class="mceContentBody " spellcheck="false" dir="ltr">
      <p>
        <br mce_bogus="1">
      </p>
    </body>
    </html>
</iframe>

私が試したコードは次のとおりです。

@browser.elements(:xpath => '//*[@id="tinymce"]').p.send_keys [:control, 'a']

私が得ているエラーは次のとおりです。

undefined method `elements' for #<String:0x24ba570> (NoMethodError)

私も試しました

$browser.frame(:id,'edit-field-verdict-0-value_ifr').html.body(:id,'tinymce').p.send_keys [:control, 'a']

でも体がワティルに認識されないので、私もやってみelements_by_xpathました。うまくいきませんでした。

どうすればこれを機能させることができますか?

4

1 に答える 1

4

@browser最初の試行では、Watir::Browser オブジェクトではなく文字列であるというエラー メッセージが表示されます。@browserが正しく設定されていることを確認する必要があります。2番目の例に基づいて、おそらくそれはグローバル変数であることを意図しています$browser

2 回目の試みについてbodyは、Watir でサポートされています。ただし、htmlhtml 要素ではなく、ページの html を返します。body 要素は 1 つしかないため、このhtml要素は省略できます。

$browser.frame(:id,'edit-field-verdict-0-value_ifr').body(:id,'tinymce').p.send_keys [:control, 'a']

ただし、frame メソッドを含める必要があるのは (watir にフレーム内を調べるように指示するため) だけであり、対話している要素を確実に見つけるために必要なだけであることに注意してください。余分なものは、コードをより冗長にするだけであり、おそらく物事をより脆弱で壊れやすくします. したがって、上記は次のように短縮できます

$browser.frame(:id,'edit-field-verdict-0-value_ifr').p.send_keys [:control, 'a']

テストしている要素の ID に基づいて、WYSIMYG エディターであると想定します。例については、Watir-Webdriver ページ ( http://watirwebdriver.com/wysiwyg-editors/ ) を参照してください。Web ページの TinyMCE エディターの例:

require 'watir-webdriver'
b = Watir::Browser.new
b.goto 'http://tinymce.moxiecode.com/tryit/full.php'
b.execute_script("tinyMCE.get('content').execCommand('mceSetContent',false, 'hello world' );")
b.frame(:id => "content_ifr").send_keys 'hello world again'
于 2013-04-17T14:12:27.543 に答える