質問

ASP.NETを使用すると、タグIDはかなり揮発性であるため、テストをより堅牢にするために、ラベルテキストで要素を見つけたいと思います。私はワティンと一緒にプレイしましたが、これを完璧に行いますが、そのプロジェクトは最近死んでいるように見えますので、フレームワークを決定する前にセレンも調べると思いました。

このような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に依存しすぎています。ワティンで私は書く:

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

セレンでこれを行う方法はありますか?

役に立ちましたか?

解決

私はあなたが次のことでこれを行うことができると信じています:

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

text()= 'username'ビットは、innerhtmlで必要なラベルを取得し、 /@forはその「for」属性の値を返します。

注意喚起: これはテストされていません(謝罪!)が、IDEプラグインのいくつかのツールに基づいて機能すると思います

他のヒント

これは機能します:

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

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

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

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

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

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

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

一部のブラウザが時折の要素に迷惑なスペースを追加していることがわかっているので、私は通常、contains()を使用することを好みます。

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

入力前のシングルスラッシュは、1レベルダウンのみを示し、ダブルスラッシュがラベルの下のすべてのレベルを確認することに注意してください。 FirefoxにXpatherを使用して、Xpathsを作成して確認してください。非常に便利です。

はい、XPath、CSS、またはDOMロケーターを使用して要素を識別できます。この例では、xpathは// lable [@for = 'ctl00_content_loginform_ctl01_username']のように見えます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top