Ждет HtmlElements

Если кнопка не существует, тест будет зависать гораздо дольше 5 секунд.

Метод findElement() в DefaultElementLocator был вызван ~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);
    }
    // ...
}

1 ответ

Я думаю, что проблема связана с неявным ожиданием, которое установлено по умолчанию в 5 секунд. Смотрите эту проблему для более подробной информации.

Я думаю, что происходит, когда вы пытаетесь получить обернутый элемент:

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

он неявно ждет 5 секунд для каждого @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();
    }
}
Другие вопросы по тегам