0

这是我第一次发布问题,如果我没有遵循 StackExchange 的礼仪/最佳实践,或者我只是说错了话,请耐心等待(和/或提供建设性的批评)。我目前正在从事一个个人 Selenium 项目,该项目测试手机游戏网站的某些部分。游戏中有好几个类(比如Knight、Mage等),我注意到网站上大部分对象的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();
    }

这种方法允许我的很多代码可重用,但我担心这会使程序不那么干净,因为页面上的对象没有分配给特定的变量。有没有办法使用 PageFactory 处理具有相似 XPath 的页面对象,或者将这些页面对象中的每一个视为不同的 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();
        }

    }
4

0 回答 0