2016-09-23 3 views
4

Я использую Selenium Webdriver с QAF. Проблема, с которой я сталкиваюсь, связана с поиском элемента на веб-странице. для нескольких элементов, разные локаторы работают в разное время.Несколько локатор для поиска webelement с webdriver

Например, иногда 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, у вас уже есть решения, доступные для такого варианта использования. Прежде всего, вы должны использовать репозиторий Locator, Вместо локатора жесткого кодирования на странице просто укажите ключ локатора.

Например:

В page.loc Файл

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

В классе Page:

@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. Работает на меня.

Смежные вопросы