Как получить текущий исходный HTML-код страницы AJAX с помощью Facebook WebDriver?

Привет, я новичок в Facebook. Мне нужна помощь в получении HTML-кода страницы AJAX.

Вот мои ожидаемые результаты:

$first == HTML source of the 1st page.
$second == HTML source of the 2nd page.
$third == HTML source of the 3rd page.

Но мой Выход:

$first == HTML source of the 1st page.
$second == $first
$third == HTML source of the 2nd page.

Тем не менее, я мог получить исходный код HTML 2-й страницы, когда попал на 3-ю страницу.
Я не знаю, почему я не могу получить текущий HTML-код на текущей странице.

Пожалуйста помоги!

Вот мой код:

<?php
$host = 'http://localhost:4444/wd/hub';
$capabilities = DesiredCapabilities::firefox();
$driver = RemoteWebDriver::create($host, $capabilities, 5000);

// Openning page
$driver->get('https://careers.yahoo.com/?global=1');

// Click 'Search'
$driver->findElement(WebDriverBy::className('yellow-submit'))->click();

// Wait until Ajax part loaded
$driver->wait(40)->until(
WebDriverExpectedCondition::presenceOfAllElementsLocatedBy(
WebDriverBy::className('actions-container')
));

// Print HTML of the 1st page
$first = $driver->getPageSource();
print_r($first);

// go to 2nd page
$driver->findElement(WebDriverBy::id('next'))->click();

// Wait until the 2nd page is loaded
$driver->wait(40)->until(
WebDriverExpectedCondition::presenceOfAllElementsLocatedBy(
WebDriverBy::className('actions-container')
));

// Print HTML of the 2nd page
$second = $driver->getPageSource();
print_r($second);

// go to 3rd page
$driver->findElement(WebDriverBy::id('next'))->click();

// Wait until the 3rd page is loaded
$driver->wait(40)->until(
WebDriverExpectedCondition::presenceOfAllElementsLocatedBy(
WebDriverBy::className('actions-container')
));

// Print HTML of the 3rd page
$second = $driver->getPageSource();
print_r($third);

$driver->quit();

2

Решение

«… Если страница была изменена после загрузки (например, с помощью Javascript), нет никакой гарантии, что возвращаемый текст соответствует тексту измененной страницы …» (часть getPageSource)

В конце концов, это означает, что селен не обязательно является последним источником! в данный момент.

Для вашего результата: зацикливание — это хорошо, попробуйте немного поспать между поисками элемента. это сэкономит тестам ненужное время сна, но все равно не сломается,

0

Другие решения

в JQuery существует такой флаг, что JQuery.active = 0 после завершения всего Ajax. Верно ли это в AJAX без JQuery, я не знаю.

Следующий код, который я украл у кого-то здесь, и я не могу на всю жизнь вспомнить, где, но это удобно (в контексте JQuery + Selenium2 + PHPUnit)

public function waitForAjax()
{
while(true)
{
$ajaxIsComplete = array(
'script' => 'return jQuery.active == 0',
'args' => array()
);
$ajaxIsComplete = $this->execute($ajaxIsComplete);
if ($ajaxIsComplete) {
break;
}
sleep(1);
}
}

а не просто торчащий «сон» (N) «на все, где N это произвольное число, в конце концов, приятно не ДОЛЖНО ждать так долго каждый раз …

0

По вопросам рекламы [email protected]