1

如果该按钮不存在,则测试将挂起超过 5 秒。

方法findElement()inDefaultElementLocator被调用了 ~63 次!

块的嵌套越深,等待时间越长。

是否可以在 htmlElements 中以这种方式使用块?我究竟做错了什么?

@Test
public void myTestFunc() {
    WebElement element = myPage.getMyForm()
                              .getSubForm()
                              .getButton()
                              .getWrappedElement();
    try {
        (new WebDriverWait(driver, 5))
            .until(ExpectedConditions.visibilityOf(element));
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}
public class MyPage {
    @FindBy(className = "...")
    private MyForm myForm;

    public MyPage(WebDriver driver){
        PageFactory.initElements(new HtmlElementDecorator(driver), this);
    }

    public MyForm getMyForm() {
        return myForm;
    }
}
public class MyForm extends HtmlElement {
    @FindBy(className = "...")
    private MySubForm mySubForm;

    public MySubForm getMySubForm() {
        return mySubForm;
    }
}
public class MySubForm extends HtmlElement {
    @FindBy(className = "...")
    private MyButtonWrap button;

    public MyButtonWrap getButton() {
        return button;
    }
}
public class MyButtonWrap extends Button {
    public MyButtonWrap(WebElement wrappedElement) {
        super(wrappedElement);
    }
    // ...
}
4

1 回答 1

0

我认为问题与默认设置为 5 秒的隐式等待有关。有关详细信息,请参阅此问题。

我认为正在发生的是,当您尝试获取 WrappedElement 时:

myPage.getMyForm().getSubForm().getButton().getWrappedElement();

它隐含地等待每个 5s @FindBy

尝试放置打印语句并查看时间花费在哪里,例如:

public void myTestFunc() {
    System.out.println("start");
    element = myPage.getMyForm().getSubForm().getButton().getWrappedElement();
    System.out.println("got element");
    try {
        (new WebDriverWait(driver, 5)).until(visibilityOf(element));
        System.out.println("Finished waiting successfully");
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}
于 2016-06-06T13:18:36.837 回答