Рекомендации: использование параметров метода для создания строки XPath - PullRequest
0 голосов
/ 11 октября 2018

Я впервые пишу вопрос, так что терпите меня (и / или высказывайте конструктивную критику), если я не соблюдаю этикет / лучшие практики для StackExchange или если я просто говорю что-то неправильно.В настоящее время я работаю над личным проектом Selenium, который тестирует части веб-сайта для мобильной игры.В игре есть несколько классов (например, Рыцарь, Маг и т. Д.), И я заметил, что XPath для большинства объектов на сайте используют эти имена для ссылки на объект, что приводит к нескольким подобным XPath, которые толькоменяются на одно слово.

Пример:

    By knightImage = By.xpath("//img[contains(text(), 'Knight Hero')]");
    By mageImage = By.xpath("//img[contains(text(), 'Mage Hero')]");

Мой первоначальный ответ на это состоял в том, чтобы создать методы, которые используют имена классов символов в качестве входных данных, и создать xpath внутри.

Пример:

    public void selectHero(String heroClassName) {

        By selectedHero = By.xpath("//img[contains(text(), '"
            + heroClassName + " Hero')]");
        driver.findElement(selectedHero).click();
    }

Этот метод позволяет много раз использовать мой код, но я обеспокоен тем, что это может сделать программу менее чистой, так как объекты на странице не назначенык конкретным переменным.Есть ли способ обработки объектов страницы с похожими XPath с использованием PageFactory, или лучше рассматривать каждый из этих объектов страницы как отдельную переменную WebElement и создавать отдельные методы для каждого?

Пример

    public class HeroPage() {

        @FindBy(xpath = "//img[contains(text(), 'Knight Hero')]")
        private WebElement knightImage;

        @FindBy(xpath = "//img[contains(text(), 'Mage Hero')]")
        private WebElement mageImage;

        public HeroPage(WebDriver driver) {
            super(driver);
        }

        public void selectKnight() {
            knightImage.click();
        }

        public void selectMage() {
            mageImage.click();
        }

    }
...