Как использовать селен 2 элемента PageFactory init с Wait.until ()?

Фрагмент кода ниже хорошо работает, но я испытываю немного затруднений из-за wait.until() строка:

wait.until(new ElementPresent(By.xpath("//a[@title='Go to Google Home']")));

Это работает, но я хочу отправить мой PageFactory WebElement homePageLink вместо этого:

wait.until(new ElementPresent(homePageLink));

Там какой-либо путь состоит в том, чтобы сделать это?

Они новый fangled Селен, 2 функции имеют мою голову в чем-то вроде вращения и я не могу найти много документации.

Спасибо.

public class GoogleResultsPage extends TestBase {

    @FindBy(xpath = "//a[@title='Go to Google Home']")
    @CacheLookup
    private WebElement homePageLink;

    public GoogleResultsPage() {  
        wait.until(new ElementPresent(By.xpath("//a[@title='Go to Google Home']")));
        assertThat(driver.getTitle(), containsString("Google Search"));
    }  
}

public class ElementPresent implements ExpectedCondition<WebElement> {

    private final By locator;

    public ElementPresent(By locator) {
        this.locator = locator;
    }

    public WebElement apply(WebDriver driver) {
        return driver.findElement(locator);
    }
}
14
задан Marc Climent 14 December 2011 в 10:17
поделиться

1 ответ

Я использую PageFactory с AjaxElementLocatorFactory - PageFactory - это класс поддержки шаблона Selenium 2 Page Objects, который вы используете, а AjaxElementLocatorFactory - это фабрика для локаторов элементов. В вашем случае конструктор будет выглядеть так:

public GoogleResultsPage() { 
    PageFactory.initElements(new AjaxElementLocatorFactory(driver, 15), this);
}

Этот код будет ждать максимум 15 секунд, пока на странице не появятся элементы, указанные в аннотациях, в вашем случае homePageLink, который будет найден по xpath. Вам не нужно будет использовать класс ElementPresent.

21
ответ дан 1 December 2019 в 12:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: