Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用@FindBy查找元素。重构和最佳实践_Java_Selenium_Testing_Xpath_Selenium Webdriver - Fatal编程技术网

Java 使用@FindBy查找元素。重构和最佳实践

Java 使用@FindBy查找元素。重构和最佳实践,java,selenium,testing,xpath,selenium-webdriver,Java,Selenium,Testing,Xpath,Selenium Webdriver,我目前在selenium框架中有这个方法 public void selectAddProductButton() { driver.findElement(By.id("Content")).findElement(By.className("Title")).findElement(By.tagName("a")).click(); } 然而,我喜欢它,我不喜欢它。我觉得这是一种肮脏的方式。我认为使用@FindBy会更好,但我不知道怎么做。我在网上读到,我可以通过使用带有xpath

我目前在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
之外,您还有多个其他选项。在这种情况下,您需要使用另一个参数<代码>如何=如何.ID

示例

FindBy(how = How.ID, using = "foobar") WebElement foobar;
查找Java文档

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

•css

•身份证

•链接文本

•名称

•partialLinkText

•标记名

•使用


•xpath

哈哈,当我指的是“这个”时,实际上我指的是较长的那个。driver.findElement(按.id(“内容”)).findElement(按.className(“标题”)).findElement(按.tagName(“a”)).click();我是否可以通过使用@FindByWhat来改善这一点?你的问题是什么?你在哪里读到“使用xpath…是一种糟糕的做法”?这是完全错误的!好吧,也许还不错。但也许这应该是我在其他选择之前使用的最后一个选择,因为它没有那么清晰和简洁。你上面帖子中的大多数假设都是不正确的。你可能想做更多的研究,也许是一个小的概念证明。你的文章,就像现在一样,有可能因为离题而被关闭。请通读一遍。正如@SiKing所说,你的假设完全不正确。曾经有一段时间,XPath与其他选项相比速度很慢(我的意思是非常慢),但这在几年前就被清除了。此外,我通常会避开FindBy注释,这仅仅是因为由此产生的StateElementException问题。但是,使用xpath或css选择器可以大大改进您的原始代码:by.cssSelector(“#Content.Title a”)或by.xpath(“//*[@id='Content']]/*[contains(@class,'Title')]//*[contains(@class,'Title')]///a”)
@FindBy
页面工厂
的绝对必要的组件,我发现这是构建
PageObject
类的一种非常稳定和优秀的方法。除此之外,我不知道你会用这个注释做什么。不确定@alhot在谈论什么“因此而产生的StateElementException问题”。