11

ASP.NET では、タグ ID は非常に揮発性が高いため、テストをより堅牢にするために、ラベル テキストで要素を見つけたいと考えています。私はWatiNでいくつかプレイしましたが、これは完璧に機能しますが、そのプロジェクトは最近は死んでいるように見えるので、フレームワークを決定する前にSeleniumも調べてみようと思いました.

私はこのようなhtmlを持っています

<label for="ctl00_content_loginForm_ctl01_username">Username</label>:
<input type="text" id="ctl00_content_loginForm_ctl01_username" />

入力したくない:

selenium.Type("ctl00_content_loginForm_ctl01_username", "xxx");

IDに頼りすぎです。WatiN では、次のように記述します。

browser.TextField(Find.ByLabelText("Username")).TypeText("xxx");

Seleniumでこれを行う方法はありますか?

4

4 に答える 4

13

これは機能します:

//input[@id=(//label[text()="Username"]/@for)]

説明:入力を探しているので:

//input[@id=("ctl00_content_loginForm_ctl01_username")]

「ctl00_content_loginForm_ctl01_username」をラベルの属性の値に置き換えます。

//label[text()="Username"]/@for
于 2011-11-25T09:18:20.637 に答える
7

次の方法でこれを行うことができると思います:

selenium.Type(selenium.getAttribute("//label[text()='Username']/@for"), "xxx");

text()='Username' ビットは、その innerHTML によって必要なラベルを取得し、次に /@for はその「for」属性の値を返します。

注意:これはテストされていません (申し訳ありません!) が、IDE プラグインのいくつかのツールに基づいて、動作すると思います。

于 2010-01-08T22:09:26.077 に答える
3

わかりました、これは1年前かもしれませんが、彼らはちょっと. これにより、テキスト「ユーザー名」を含むラベルの下の最初の入力が選択されます。

//label[text()='Username']/input

私は通常、一部のブラウザーが不定期の要素に迷惑なスペースを追加していることに気付いたので、contains() を使用することを好みます。

//label[contains(., 'Username')]/input

入力の前の単一のスラッシュは、1 レベル下のみを検索することを示し、二重のスラッシュはラベルの下のすべてのレベルをチェックすることに注意してください。XPather for Firefox を使用して、XPath を作成および確認します。これは非常に便利です。

于 2011-02-11T09:14:19.360 に答える
1

はい、XPath、CSS、または DOM ロケーターを使用して要素を識別できます。この例では、特定のラベルを識別するために、XPath は //lable[@for='ctl00_content_loginForm_ctl01_username'] のようになります。

于 2010-01-08T21:56:46.947 に答える