Java WebDriver ожидает загрузки страницы - PullRequest
8 голосов
/ 28 марта 2012

Я хочу получить исключение при загрузке страницы, но результаты пока отсутствуют. Я использую implicitlyWait, чтобы установить таймер для выдачи исключения.

WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(1, TimeUnit.MILLISECONDS);
driver.get("http://www.rambler.ru");
driver.quit();

Может кто-нибудь обновить меня с предложениями? Мне нужно это, чтобы убедиться, что загрузка страницы не будет бесконечной, и если время загрузки будет больше, чем я определил в таймере -> выбросить исключение как результат и пропустить TC (как неудачный).

Спасибо, Владимир

Ответы [ 2 ]

17 голосов
/ 28 марта 2012

Почему вы используете неявное ожидание перед открытием страницы?Попробуйте использовать явное ожидание.Найдите какой-нибудь основной элемент страницы в ramber (например, текстовое поле поиска).Например:

 WebDriverWait wait = new WebDriverWait(webDriver, 5);
 wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("xpath_to_search_textbox")));

, пока метод () не вызовет исключение TimeoutException, если текстовое поле поиска не появится в течение 5 секунд.

0 голосов
/ 06 апреля 2013

Я не согласен, что ответ Павла Зориньша сработает, потому что он не показывает, как обрабатывать исключения.

Вот как я делаю ожидание iFrame. Это требует, чтобы ваш тестовый класс JUnit передавал экземпляр RemoteWebDriver в объект страницы:

public class IFrame1 extends LoadableComponent<IFrame1> {

    private RemoteWebDriver driver;

    @FindBy(id = "iFrame1TextFieldTestInputControlID" )
    public WebElement iFrame1TextFieldInput;

    @FindBy(id = "iFrame1TextFieldTestProcessButtonID" )
    public WebElement copyButton;

    public IFrame1( RemoteWebDriver drv ) {
        super();
        this.driver = drv;
        this.driver.switchTo().defaultContent();
        waitTimer(1, 1000);
        this.driver.switchTo().frame("BodyFrame1");
        LOGGER.info("IFrame1 constructor...");
    }

    @Override
    protected void isLoaded() throws Error {        
        LOGGER.info("IFrame1.isLoaded()...");
        PageFactory.initElements( driver, this );
        try {
            assertTrue( "Page visible title is not yet available.", driver
     .findElementByCssSelector("body form#webDriverUnitiFrame1TestFormID h1")
                    .getText().equals("iFrame1 Test") );
        } catch ( NoSuchElementException e) {
            LOGGER.info("No such element." );
            assertTrue("No such element.", false);
        }
    }

    @Override
    protected void load() {
        LOGGER.info("IFrame1.load()...");
        Wait<WebDriver> wait = new FluentWait<WebDriver>( driver )
                .withTimeout(30, TimeUnit.SECONDS)
                .pollingEvery(5, TimeUnit.SECONDS)
                .ignoring( NoSuchElementException.class ) 
                .ignoring( StaleElementReferenceException.class ) ;
            wait.until( ExpectedConditions.presenceOfElementLocated( 
            By.cssSelector("body form#webDriverUnitiFrame1TestFormID h1") ) );
    }
....

ПРИМЕЧАНИЕ: Вы можете увидеть весь мой рабочий пример здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...