【发布时间】:2015-09-16 07:50:26
【问题描述】:
我目前在我的 selenium 框架中有这个方法。
public void selectAddProductButton() {
driver.findElement(By.id("Content")).findElement(By.className("Title")).findElement(By.tagName("a")).click();
}
但是,我喜欢它,我不喜欢它。我觉得这是处理这个问题的一种肮脏方式。我认为使用@FindBy 会更好,但我不知道该怎么做。我在网上读到我可以通过使用带有 xpath 的@FindBy 来实现这一点。但是,我也读过以这种方式使用 xpath 是一种不好的做法。有没有更好的方法可以做到这一点?我通常使用@FindBy 来处理更简单的事情。一个例子是
@FindBy(id = "firstname")
private WebElement firstName;
除非我使用 xpath,否则我认为没有办法使用 @FindBy 找到嵌套在其他元素中的元素
【问题讨论】:
-
您在哪里读到“使用 xpath ... 是一种不好的做法”?那是完全错误的!
-
好吧,也许是不错的做法。但也许它应该是我在任何其他选项之前使用的最后一个选项,因为它不是那么清晰和简洁。
-
您上面帖子中的大多数假设都是不正确的。你可能想做更多的研究,也许是一个小的概念证明。照原样,您的帖子有因偏离主题而被关闭的危险。请阅读How to Ask。
-
正如@SiKing 所说,您的假设完全不正确。与其他选项相比,曾经有一段时间 XPath 很慢(我的意思是真的很慢),但这一切都在几年前被清除了。此外,我通常会避开 FindBy 注释,因为它会导致 StateElementException 问题。但是,您的原始代码可以通过使用 xpath 或 css 选择器得到很大改进: By.cssSelector("#Content .Title a") 或 By.xpath("//*[@id='Content']//* [包含(@class, 'Title')]//a")
-
@FindBy绝对是PageFactorycode.google.com/p/selenium/wiki/PageFactory 的基本 组件,我发现它是构建PageObject类的一种非常稳定且出色的方法。我不知道你会用这个注释做什么。不确定@alhot 所说的“由此产生的 StateElementException 问题”。
标签: java selenium testing xpath selenium-webdriver