2016-09-23 5 views
4

QAFでSelenium Webdriverを使用しています。 私が直面している問題は、ウェブページ上の要素を見つけることに関連しています。要素の数が少ない場合は 、異なるロケータは異なる時に動作します。webdriverでwebelementを検索するための複数のロケータ

たとえば、時にはname = nameAが動作し、場合によってはname = nameB(AUTの環境によって異なる場合がありますが、手がかりはありません)。以下

検索コード:

public class HomePage extends WebDriverBaseTestPage<WebDriverTestPage> { 


    @FindBy(locator="name=nameA") 
    private QAFWebElement btnSomeElement; 


    @Override 
    protected void openPage(PageLocator locator, Object... args) { 
     driver.get("/"); 
    } 
} 

私はこの問題で来て何をすべきか?

+0

異なる環境/プラットフォームのケースで異なるロケータですか? – user861594

+1

はい、QA /ステージング/プロダクトロケータの変更などの別の環境では、長いxpathやその他の戦略でオーバーロードしたくありません – Shalin

答えて

3

すでにQAFを使用している間に、そのようなケースではすでに解決策が用意されています。まず、ロケータリポジトリを使用する必要があります。 ロケータの代わりにロケータを使用してください。例えば

page.locでPageクラスでファイル

my.ele.locator=<locatorStretegy>=<locator> 
my.ele.locator=name=elemName 

@FindBy(locator = "my.ele.loc") 
private QAFWebElement btnSomeElement; Now coming to your problem, if most of the locator very with environment then you can utilize 

resource management capabilities of QAF。それ以外の場合は、 alternate locator strategy QAFが提供することができます。たとえば:

my.ele.locator=['css=.cls#eleid','name=eleName','name=eleName2'] 
my.ele.locator=['name=eleNameEnv1','name=eleNameEnv2'] 
+1

のようなロケータを提供するのが難しい場合があります。 – Shalin

1

両方の環境に一致するセレクタが必要です.CSSまたはXPATHセレクタを使用してください。

ヘルプが必要な場合は、セクション/要素を含むHTMLスニペットを追加してください。

名前で選択すると、この名前が変更されていると仮定すると、あなたは次のように両方の名前と一致するセレクタを書くことができます:

CSS:[name=nameA], [name=nameB]
のxpath://*[@name='nameA' or @name='nameB']

+0

これは、例えばモバイルネイティブの場合、特にiOS – user861594

0

それはロケータは、非常に一般的です時折変化する。テーブル行の中の特に動的な要素もあります。要素の位置を特定するには、xpathのようなより具体的なロケータを使用する方がよいでしょう。

@FindBy(locator = "xpath=//button[text()='ButtonName']") 
private QAFWebElement btnSomeElement; 
0
btn.login.page.logon.button = {\"locator\":[\"xpath=//div[contains(@id,'logonbutton')]//span[contains(text(),'Logon')]\",\"xpath=//*[contains(text(),'Logon') or @id='__screen0-logonBtn']\"]} 

これは、QAFで複数のロケータを使用してテキストファイルに同じの一例です。私のために働く。

関連する問題