【问题标题】:Using @FindBy to find an element. Refactoring and best practices使用 @FindBy 查找元素。重构和最佳实践
【发布时间】: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 绝对是PageFactory code.google.com/p/selenium/wiki/PageFactory基本 组件,我发现它是构建PageObject 类的一种非常稳定且出色的方法。我不知道你会用这个注释做什么。不确定@alhot 所说的“由此产生的 StateElementException 问题”。

标签: java selenium testing xpath selenium-webdriver


【解决方案1】:

当然。除了xpath,您实际上还有多个其他选项。在这种情况下,您需要使用另一个参数。 how = How.ID

示例

FindBy(how = How.ID, using = "foobar") WebElement foobar;

查找 Java 文档here

Enum How 为您提供以下所有选项:

• css

• 标识

• 链接文本

• 名称

• 部分链接文本

• 标记名称

• 使用

• xpath

【讨论】:

  • 哈哈,当我指的是“这个”时,我实际上指的是更长的那个。 driver.findElement(By.id("Content")).findElement(By.className("Title")).findElement(By.tagName("a")).click();无论如何我可以通过使用一些@FindBy 来使这更好
  • 那你的问题是什么?
猜你喜欢
  • 2018-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
  • 1970-01-01
  • 2015-08-23
  • 2023-03-28
  • 2014-10-02
相关资源
最近更新 更多