6

Watir を使用して、属性のない要素にアクセスする方法はありますか?

例えば:

<span>Text</span>

xpath の使用は避けたいと思いますが、それが唯一の方法である場合はクールです。

4

3 に答える 3

11

最初にタグを付けたり、開発者 (または自分自身) に一意の属性を要求したりするという WATIR 以外の問題を無視して、親要素またはインデックスによっていつでも要素にアクセスできます。

例: テキスト

@browser.div(:name => "content").span(:index => 1)
#this is the first span element inside this div

Xpath を使用せずに、子スパン要素に到達する前に、必要な数の一意の要素を処理できます。もちろん、その特定の子要素に到達するために必要な一意の親要素は 1 つだけであり、そこから子にたどり着きます。

div(:how => what).table(:how => what).td(:how => what).span(:how => what).text

ページのn 番目のスパンであると仮定した別の例: @browser.span(:index => n )

ただし、インデックスによるアプローチは非常に脆く、ページが更新されると破損する傾向があります。

于 2011-11-30T19:11:58.937 に答える
9

テキストがある場合:

browser.span(:text => "Text")

テキストの一部しかわからない場合は、正規表現を使用できます。

browser.span(:text => /Text/)
于 2011-11-30T20:29:59.263 に答える
8

この特定の課題に対処するには、基本的に 3 つの方法があります。Zeljko は、既知のテキストなどの要素の内部にあるものに基づく最初のものに対処しました。Adam は最も一般的な方法である、要素を囲んでいる、または要素を含んいる方法について説明ます

必要な要素の中に既知の要素がある場合は、それから始めて、.parentメソッドを使用して「コンテナ」要素を取得できます。これは、.parent を使用して「兄弟」要素を検索するためにも使用でき、テーブル行などの共通コンテナーを介して目的の要素に到達します。最初の使用法はかなり明白ですが、2 番目の使用法はおそらくより一般的であり、テーブルを操作するときに非常に便利です。

たとえば、1 つの列が一意の部品番号で、別の列に「カートに追加」リンクがある複数行のデータを含むテーブルがあるとします。ここで、特定のパーツをカートに追加する場合は、その特定のテキストの 5 番目のリンクであることに基づいて、次のようなコードを使用して「カートに追加」というテキストと組み合わせてインデックスを使用できます。

browser.link(:text => 'add to cart', :index => 4).click

しかし、これは脆弱です。なぜなら、結果が変わるとすぐに (これはライブ データで頻繁に発生する可能性があります)、パーツがそのテーブルの 5 番目のパーツではなくなり、テストが壊れてしまうからです。その行の他の部分ではなく、正しい部分を見つけたことを確認する必要があります。ただし、watir では次のようなことができます。

browser.cell(:text => 'Part no. 123-45').parent.link(:text => 'add to cart').click

表セルの場合、セルの親は通常表の行になるため、平易な英語では、「部品番号 123-45」を含むセルを検索し、その同じ行で検索することになります。 [カートに追加] リンクをクリックします。(コードを読んだだけでそれを理解したと思いますが。)

これを使用して、操作する必要があるオブジェクトの横または内部に一意の要素がある「兄弟」または「親」自体を取得できます。

おそらく Xpath を使用して同様のことを行うことができますが、5 週間後にコードを読んだときに意味を理解できるようになることをお勧めします。これが、Selenium よりも Watir と Watir-Webdriver を非常に好む理由の 1 つです。

于 2011-11-30T21:15:36.000 に答える