Java how=硒中的how.ID
我有一个小问题,Selenium中的以下行与Page Factory有什么区别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
@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;