从wiki文档https://github.com/SeleniumHQ/selenium/wiki/PageFactory我发现,如果脚本使用例如。发现了一些内容
@FindBy(id = "q") WebElement q;
句子:
q.sendKeys(text);
相当于:
driver.findElement(By.id("q")).sendKeys(text);
但是如何在POM中使用Annotation:
driver.findElements(By.id("q")).isEmpty() ?
目前我只使用纯Selenium winthout Annotation,例如
if(!driver.findElements(By.id("q")).isEmpty()) {
q.click }
当然,我可以使用try / cath,但是在POM中应该有一些注释用于' findElement s '。
答案 0 :(得分:2)
你要求的不是Selenium WebDriver
。这是Java。
isEmpty()
方法属于List
接口。调用List
方法后返回findElements()
。
如果您想使用@FindBy
并检查List
是否为空,请执行以下操作:
@FindBy(id = "q")
WebElement element;
@FindBy(id = "q")
List<WebElement> listOfElements;
public void someMethod() {
//can't use `isEmpty()` on `element` because it's NOT a list
listOfElements.isEmpty(); //that's how you can use it
}
答案 1 :(得分:1)
根据要使用 PageFactory 的The PageFactory Documentation,您需要在 PageObject 上声明一些 WebElement 的字段或列表,例如:
WebElement
:
@FindBy(how = How.ID, using = "foobar") WebElement foobar;
List<WebElement>
:
@FindBy(how = How.TAG_NAME, using = "a") List<WebElement> links;
因此 PageFactory 设计基于我们必须声明变量的原理,而PageFactory将在页面上搜索与该类中WebElement的字段名称匹配的元素。它通过首先查找具有匹配的定位器策略的元素来实现此目的。
因此,要按照driver.findElements(By.id("q")).isEmpty()
在POM中实现 @FindBy 注释,您可以使用以下代码块:
@FindBy(how = How.TAG_NAME, using = "a") List<WebElement> links;
public void myFunction()
{
if(!links.isEmpty())
{
for(WebElement ele:links)
ele.click();
}
}