1

aWatir では、Bootstrap が提供するポップオーバー内に表示される要素にアクセスしようとしています。

呼び出しだけでa(:class, 'my_link').clickはボールをプレーしたくなかったのでa(:class, 'my_link').wait_until_present、ポップオーバーを生成する要素をクリックしてそのコンテンツにアクセスする間のタイミングの問題である可能性があることを期待して行を追加しましたが、これは 30 秒後にタイムアウトし、その要素を返します存在することはありません。

待機中にコード インスペクタを開いて、要素が存在し、クリック可能であることを確認できます。

Watirが行うべき手順を手動で実行することを言及する必要があります。

私の現在の考え

jQuery を使用してこの要素と対話しようとしたとき、通常の使用で.click();は機能せず、代わりに呼び出す必要$('body').on('click', ',my_link');があったことを知っています。

要素が不可視として誤って分類されていることに関係している可能性があります。

どんなガイダンスもありがたく受け取られます。

コード

ポップオーバー内から生成されたコードは次のとおりです。

<div class="popover fade bottom in" style="top: 40px; left: 424px; display: block;">
  <div class="arrow"></div>
  <div class="popover-inner">
    <h3 class="popover-title"></h3>
    <div class="popover-content">
    <!-- SNIP -->
      <p>
        <a class="my_link">My Link</a>
      </p>
    </div>
  </div>
</div>

ポップオーバーはクリックで生成されます。

$('.nav-popup').popover('show');

ここに、Watir テストの関連部分があります。

span(:class, 'nav-popup').click
a(:class, 'my_link').wait_until_present
a(:class, 'my_link').click

ポップオーバーを操作できることを確認するために、Watir テストに以下を追加しました。

quick_log = a(:class, 'my_link').html
binding.pry

そして、pry を開くとquick_log、正しい HTML コンテンツが含まれている a(:class, 'my_link').wait_until_presentことがわかりました。

エラー メッセージ

この線

a(:class, 'my_link').click

生成します。

Selenium::WebDriver::Error::ElementNotVisibleError:
   Element is not currently visible and so may not be interacted with
4

2 に答える 2

2

あなたの答えを考えると、私が単純に行う2行のコードではなく

browser.div(:class, 'popover-content').a(:class, 'my_link').click

それがJavaScriptによって動的に作成されていることを考えると、同期するためにいくつかのものを投げ入れて、要素が生成されるのを待つ必要があるかもしれません

browser.div(:class, 'popover-content').when_present.a(:class, 'my_link').click
于 2013-04-15T16:59:59.820 に答える
1

これは、ブートストラップがポップオーバーを生成する方法と関係があるようです。どこかから複製する必要がありa(:class, 'my_link').clickます。つまり、実際のポップオーバーが複製される隠しバージョンを見つけていたということです。

これを修正するために、私はに変更a(:class, 'my_link').clickしました

container = div(:class, 'popover-content')
container.a(:class, 'my_link').click

これにより、より具体的なものになり、重複する要素が見つかるのを回避できます。

于 2013-04-15T14:11:48.440 に答える