ページがローカライズされており、「アカウントの作成」WebElementは英語、中国語または日本語です。私はこの要素をクリックするテストを実行するために、Selenium、Java、TestNGフレームワークを使用しています。しかし、この@FindAllを使用してページを識別するときのパフォーマンスが低下すると、これを行うためのよりよい方法があるかどうか疑問に思う。複数の要素を検索しようとすると、@FindAllの種類が遅くなる
"英語" ロケールが選択されている間に要素を検査からの要素:
<div class="form-group">
<a translate="create-account" class="pointer ng-scope" ng-click="vm.createAccount()">Create Account</a>
</div>
私のfindAll宣言:
@FindAll({
@FindBy(linkText="Create Account"),
@FindBy(linkText="创建账号"),
@FindBy(linkText="アカウントを作成")
})
private List<WebElement> createAccount;
ベースラインを比較すると、私は上記の@FindAllを使用している場合、それWebdriverがリンクをクリックするまでに約15秒かかります。 @FindByだけを使用すると、約2-3秒かかります。しかし、リンクをクリックするために正しいロケールを見つける必要があるので、@ FindByは私のためには機能しません。あなたは属性値の一部を渡した場合、それは[@attributeName*='part_of_attribute_value']
あるべきCSSの
//a[contains(@ng-click, 'createAccount')]
//a[contains(text(), 'Create Account') or contains(text(), '创建账号') or contains(text(), 'アカウントを作成')]
:
a[ng-click*='createAccount']
かのXPathの1:
私は最初の1つの言語にとらわれないアプローチが好きです。最後のものは扱いにくくなり始め、より多くの言語を追加するにつれて悪化するだけです。 – JeffC
はい、良いアプローチです。テキストを使用する場合、唯一の利点は翻訳をテストしていることですが、安定性とわずかなパフォーマンスのコストで済みます。もしOKなら答えを受け入れることができます。 – lauda
ありがとう@lauda。私はあなたのCSSセレクターを試みたが、何とかそれはまだ動作しませんでした。しかしあなたの答えは別のアイデアだったので、私は 'code'を試みました。\t @FindBy(css =" a.pointer.ng-scope ") \t私用WebElement CreateAccount;それは私のために働いた。私はなぜ 'code' @FindBy(css =" a [ng-click = 'createAccount'] ") \tプライベートWebElement CreateAccount;動作しませんでした。 –