2017-02-21 14 views
0

Я пытаюсь использовать шаблон объектов страницы в своем тестировании пользовательского интерфейса. Многие примеры предполагают сохранить By (Locator) в полях класса. Другое рекомендует сохранять WebElement (или SelenideElement, если вы используете Selenide). Хотя, оба отлично подходят для жестко закодированных локаторов, я не вижу, как использовать это для локаторов, где путь содержит переменные.Каков правильный способ размещения шаблонов в Selenide/Selenium?

Например, как сохранить в поле класса этот локатор?

public SelenideElement getTotal(String type) { 
    return $(By.xpath("//h4[contains(text(), '"+ type +"')]"); 
} 

ответ

1

Ваше решение является правильным, на мой взгляд.

Обычно я помещаю их в верхнюю часть своего объекта PageObject рядом с другими селекторами, как то, что вы сделали. Просто используйте этот метод, так как вы бы использовали один из полей SelenideElement. Что-то вроде:

private SelenideElement getTotalElementByType(String type) { 
    return $(By.xpath("//h4[contains(text(), '"+ type +"')]"); 
} 

Я бы сделать это private или protected, хотя, потому что с Page Object Pattern ваши тестовые скрипты не должны знать о WebElements на объекте страницы.

Ваш публично доступный метод будет что-то вроде этого:

public int getTotalByType(String type) { 
    string totalString = getTotalElementByType(type).getText(); 
    int total = //convert to int or whatever 
    return total; 
} 

Если вы хотите, чтобы взаимодействовать с элементом вместо получения значения, вы бы вернуть PageObject вы ожидаете пойти вместо того, чтобы следовать POPattern. :)

0

На самом деле вам не нужно сохранять локаторы в поле класса. Объект страницы не обязательно должен объявлять все элементы в полях класса. Объект страницы - объект OBJECT, означающий, что он должен предоставлять МЕТОДЫ для управления им.

Итак, вы просто идеальны. :)