Java how=硒中的how.ID

Java how=硒中的how.ID,java,selenium,selenium-webdriver,findby,page-factory,Java,Selenium,Selenium Webdriver,Findby,Page Factory,我有一个小问题,Selenium中的以下行与Page Factory有什么区别 @FindBy(id = "foobar") WebElement foobar; 及 根据两个表达式的JavaDocs: @FindBy(id = "foobar") WebElement foobar; 及 这两个表达式都指向同一个元素 修饰语 How是在org.openqa.selenium.support.How中定义的,它扩展了java.lang.Enum,还实现了java.lang.Comparabl

我有一个小问题,Selenium中的以下行与Page Factory有什么区别

@FindBy(id = "foobar") WebElement foobar;

根据两个表达式的JavaDocs:

@FindBy(id = "foobar") WebElement foobar;

这两个表达式都指向同一个元素

修饰语 How是在
org.openqa.selenium.support.How
中定义的,它扩展了
java.lang.Enum
,还实现了
java.lang.Comparable
How的枚举常数如下:


更新 根据反问题,如果您查看枚举的源代码,它是如何定义的:

public enum How {
  CLASS_NAME {
    @Override
    public By buildBy(String value) {
      return By.className(value);
    }
  },
  CSS {
    @Override
    public By buildBy(String value) {
      return By.cssSelector(value);
    }
  },
  ID {
    @Override
    public By buildBy(String value) {
      return By.id(value);
    }
  },
  ID_OR_NAME {
    @Override
    public By buildBy(String value) {
      return new ByIdOrName(value);
    }
  },
  LINK_TEXT {
    @Override
    public By buildBy(String value) {
      return By.linkText(value);
    }
  },
  NAME {
    @Override
    public By buildBy(String value) {
      return By.name(value);
    }
  },
  PARTIAL_LINK_TEXT {
    @Override
    public By buildBy(String value) {
      return By.partialLinkText(value);
    }
  },
  TAG_NAME {
    @Override
    public By buildBy(String value) {
      return By.tagName(value);
    }
  },
  XPATH {
    @Override
    public By buildBy(String value) {
      return By.xpath(value);
    }
  },
  UNSET {
    @Override
    public By buildBy(String value) {
      return ID.buildBy(value);
    }
  };

  public abstract By buildBy(String value);
}
因此,例如,当您按照以下行结合ID实施How时:

@FindBy(how = How.ID, using = "foobar") WebElement foobar;
how=how.ID从功能上返回By.ID(value),与以下行返回的内容完全相同:

@FindBy(id = "foobar") WebElement foobar;

因此,我们可以得出结论,@FindBy(id=“foobar”)@FindBy(how=how.id,using=“foobar”)只是实现相同结果的两种不同方式,可以根据用户的选择使用。

换句话说,没有真正的区别,这就引出了问题,为什么两者都有?@BillHileman我已经根据你的回答添加了一个更新。如果你有任何进一步的反问题,请告诉我。
@FindBy(how = How.ID, using = "foobar") WebElement foobar;
@FindBy(id = "foobar") WebElement foobar;