t.me/atinfo_chat Telegram группа по автоматизации тестирования

Как скипнуть загрузку всей страницы?


(zc84) #1

Привет!

 

Может кто сталкивался и могет подсказать?

 

Чем можно добиться такого результата:

 

1. dirver.get()

2. как только подгрузился WebElement -> next action

Тобишь не ждать когда подгрузиться вся страница.

 

Что попробовал:

Убирал driver.manage().timeouts().implicitlyWait(Long.parseLong("5"), TimeUnit.SECONDS); и пробовал использовть

wait.until(ExpectedConditions.elementToBeClickable(By.xpath(".."))).click(); -> элемент явно подгружен, но click() не происходит, страница продолжает загружаться...

 


Доступ к status bar в IE для проверки, что страница загрузилась полностью
(apetrovskiy) #2

Я вижу в шарпдевелопе такой тултип:

Обещается ровно то, чего вы не хотите.


(apetrovskiy) #3

Невооружённым глазом видно, что ждёт, и только потом кликает (это линк на зелёном фоне "Новости РБК" - ничего другого тормозного в голову не пришло):

[SePSX.Preferences]::OnSuccessDelay=0
$driver = Start-SeFirefox
$driver.Manage().Timeouts().SetPageLoadTimeout([System.TimeSpan]::MinValue);
Enter-SeURL "http://www.rbc.ru" | Get-SeWebElement -XPath "/html/body/div[1]/div/div[2]/table/tbody/tr[1]/td[1]/div/div/div[1]/h3/a[2]" -First | Invoke-SeWebElementClick;
 

(Mykhailo Poliarush) #4

интересная задача, только вот не уверен, что стандартными средствами вы сможете ее решить

скорее всего надо будет переопределить внутренюю логику webdriver, так как механизм проверки загрузки страницы зашит внутри


(Vol) #5

Это известная ишшю - #687

Относительно сценария что был запрошен в главном посте, у меня вышло сделать скип ожидания страницы с помощю pageLoadTimeout

 

 

@Test
public void testNew (){

FirefoxDriver driver = new FirefoxDriver();

driver.manage().timeouts().pageLoadTimeout(1, TimeUnit.MILLISECONDS);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

try{
driver.get("http://www.neckermann.be/general.aspx");
}
catch (Exception e) {
System.out.println("Page load has been skipped");
}

driver.findElement(By.xpath("(//div[@class='main-navigation']//a)[2]")).click();

driver.findElement(By.xpath("//span[@id='logo']")).click();

driver.close();

driver.quit();
}

Логи показывают что гет и файнд елемент идут в ту же самую секунду:

[23/08/2012 10:37:54] Calling method - get::{url=http://www.neckermann.be/general.aspx}
Page load has been skipped
[23/08/2012 10:37:54] Calling method - findElement::{using=xpath, value=(//div[@class='main-navigation']//a)[2]}

Есть одно "но", этот pageLoadTimeout относиться только к get(), после клика вебдрайвер по-прежнему будет ждать загрузки страницы.

 

 


(zc84) #6

-Beta- load fast preference

There is beta feature to make firefox not wait for the full page to load after calling .get or .click. This may cause immediate find's to break, so please be sure to use an implicit or explicit wait too. This is only available for Firefox and not other browsers.

   FirefoxProfile fp = new FirefoxProfile();
   fp.setPreference("webdriver.load.strategy", "unstable"); // As of 2.19. from 2.9 - 2.18 use 'fast'
   WebDriver driver = new FirefoxDriver(fp);

(Mykhailo Poliarush) #7

vol, верно, это только на загрузку страницы, а вот для клика все равно будет ждать

zcz84, и на счет фф, тоже хорошее решение, но увы оно только для ФФ, что сразу остонавливает многих, так как надо тестировать на разных браузерах


(apetrovskiy) #8

Делаю так:

 driver.Manage().Timeouts().SetPageLoadTimeout(System.TimeSpan.FromMilliseconds(timeoutValue));

где timeoutValue типа double

Выдаёт эксепшн 'Unexpected error' (действительно, нежданно).

Что я не так делаю? :-O


(Mykhailo Poliarush) #9

да вроде бы все Вы верно делаете, к сожалению, нет C# среды, чтобы проверить, работает ли у меня или нет