2016-09-20 1 views
0

ページがローカライズされており、「アカウントの作成」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

あなたは次のように、単一のCSSセレクタを使用することができます ここをクリックしてCSSルールの基本リストを表示してくださいw3schools css selectors

+0

私は最初の1つの言語にとらわれないアプローチが好きです。最後のものは扱いにくくなり始め、より多くの言語を追加するにつれて悪化するだけです。 – JeffC

+0

はい、良いアプローチです。テキストを使用する場合、唯一の利点は翻訳をテストしていることですが、安定性とわずかなパフォーマンスのコストで済みます。もしOKなら答えを受け入れることができます。 – lauda

+0

ありがとう@lauda。私はあなたのCSSセレクターを試みたが、何とかそれはまだ動作しませんでした。しかしあなたの答えは別のアイデアだったので、私は 'code'を試みました。\t @FindBy(css =" a.pointer.ng-scope ") \t私用WebElement CreateAccount;それは私のために働いた。私はなぜ 'code' @FindBy(css =" a [ng-click = 'createAccount'] ") \tプライベートWebElement CreateAccount;動作しませんでした。 –

0

Tha nks @laudaを助け、w3 cssセレクタへのリンク。

@FindBy(css="a[translate='create-account']") 
private WebElement CreateAccount; 

@FindBy (css="a.pointer.ng-scope") 
private WebElement CreateAccount; 

ただし、掲載ラウダオリジナルのソリューションは、しかし、私のために動作しなかった理由がわからない: は、私は実際に私はCSSを使用して、このリンクを特定することができる2つのより多くの方法を見つけました。

a[ng-click*='createAccount'] 
関連する問題