2013-10-11 2 views
2

Метод get (url) ожидает, что веб-страница будет полностью загружена. Если на странице много материала, загрузка может быть очень медленной.Selenium WebDriver get (url) speed issue

Есть ли способ перейти на целевую веб-страницу и ждать только интересующего WebElement? (т. е. баннеры, объявления и т. д.)

Спасибо!

ответ

2

Вы можете использовать Page load timeout. Насколько я знаю, это определенно поддерживается FirefoxDriver и InternetExplorerDriver, хотя я не уверен в других драйверах.

driver.manage().timeouts().pageLoadTimeout(0, TimeUnit.MILLISECONDS); 
try { 
    driver.get("http://google.com"); 
} catch (TimeoutException ignored) { 
    // expected, ok 
} 

Или вы можете сделать нагрузку Неблокирующей страницы с JavaScript:

private JavascriptExecutor js; 

// I like to do this right after driver is instantiated 
if (driver instanceof JavascriptExecutor) { 
    js = (JavascriptExecutor)driver; 
} 

// later, in the test, instead of driver.get("http://google.com"); 
js.executeScript("window.location.href = 'http://google.com'"); 

Оба эти примеры загрузкой Google, но они возвращают контроль над экземпляром driver обратно к вам мгновенному вместо того, чтобы ждать в целом страница для загрузки. Затем вы можете просто подождать один элемент, который вы ищете.


В случае, если вы не хотите, чтобы эта функциональность только на WebDriver#get(), но вы хотели блокирующими click(), тоже, вы можете сделать одно из них:

  1. Используйте тайм-аут загрузки страницы, как показано выше.
  2. Использование The Advanced User Interactions API (JavaDocs)

    WebElement element = driver.findElement(By.whatever("anything")); 
    new Actions(driver).click(element).perform(); 
    
  3. Использование JavaScript снова:

    WebElement element = driver.findElement(By.whatever("anything")); 
    js.executeScript("arguments[0].click()", element); 
    
Смежные вопросы