2016-09-23 84 views
4

我正在使用Selenium Webdriver和QAF。 我面臨的問題與在網頁上查找元素有關。 少數元素,不同的定位器在不同的時間工作。使用網絡驅動程序查找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/Staging/Prod定位器的變化,我不想過長的xpath或其他策略 – Shalin

回答

3

雖然您已經在使用QAF,但您已經有了適用於此類用例的解決方案。首先,你應該使用定位器存儲庫, 而不是在頁面中的硬編碼定位器只提供定位器的關鍵。

例如:

在page.loc文件

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。在其他情況下,您可以使用QAF提供的 使用alternate locator strategy。例如:

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純文本文件的一個例子。適用於我。