这是我第一次发布问题,如果我没有遵循 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();
}
}