一尘不染

如何实现@FindBy注释的用户类型?

selenium

我试图从中得到:

@FindBy(xpath = "//div/span/img")
public WebElement addNew;

@FindBy(xpath = "//tr[2]/td[12]")
public WebElement save;

@FindBy(xpath = "//td/div/input")
public WebElement entryIdel;

@FindBy(xpath = "//textarea")
public WebElement authorFieldel;

@FindBy(xpath = "//td[3]/div/textarea")
public WebElement titleFieldel;

那:

@FindBy(xpath = "//div/span/img")
public Button addNew;

@FindBy(xpath = "//tr[2]/td[12]")
public Button save;

@FindBy(xpath = "//td/div/input")
public InputBox entryIdel;

@FindBy(xpath = "//textarea")
public InputBox authorFieldel;

@FindBy(xpath = "//td[3]/div/textarea")
public InputBox titleFieldel;

我之前已经为每个元素创建了类,但是当然什么也没有发生。如何创建元素类,以便可以代替WebElement使用它?

这里是此时的InputBox代码:

 import org.openqa.selenium.WebElement;

  public class InputBox {

protected WebElement element;

public WebElement getElement() {
    return element;
}

public InputBox(WebElement element) {
    this.element = element;
    // TODO Auto-generated constructor stub
}

public void type(String input) {
    clearText();
    element.sendKeys(input);
}

public void clearText() {
    element.clear();
}

public boolean isEditable() {
    return element.isEnabled();
}

String getText() {
    return element.getText();
}

String getValue() {
    return element.getValue();
}

}

阅读 306

收藏
2020-06-26

共1个答案

一尘不染

创建一个新的FieldDecorator实现。

当您使用PageFactory时,您可能正在调用

 public static void initElements(ElementLocatorFactory factory, Object page)

这将成为

 public static void initElements(FieldDecorator decorator, Object page)

您的FieldDecorator的行为与DefaultFieldDecorator相似,只是将代理包装为您的自定义类型。

在这里查看课程[源代码]

2020-06-26