Oltre a utilizzare sleep()
nel mio test, mi chiedo se qualcuno conosce una strategia migliore per attendere esplicitamente l'invio di un modulo (POST) da completare prima continuando con le mie affermazioni. Ecco una versione molto condensata di come appare il mio test, usando phpunit insieme php-webdriver da Facebook).php-webdriver: attendere la risposta del browser dopo aver inviato il modulo utilizzando click()
function test_form_submission()
{
// setup
$web_driver = new WebDriver();
$session = $web_driver->session();
$session->open('http://example.com/login');
// enter data
$session->element('css selector', 'input[name=email]')->value(array('value' => str_split('[email protected]')));
$session->element('css selector', 'input[name=password]')->value(array('value' => str_split('testpassword')));
// click button to submit form
$session->element('css selector', 'button[name=submit]')->click();
// How do I wait here until the click() above submits the form
// so I can check that we correctly arrives at the destination below
// without resorting to sleep()?
// Confirm that login was successful because we landed on account page
$this->assertSame('http://example.com/account', $session->url());
// teardown
$session->close();
}
Quindi, quando si esegue questo codice ora, l'url nella penultima riga (l'assert) fornisce http://example.com/login invece di http://example.com/account? Presumibilmente il server Selenium dovrebbe aspettare da solo fino a caricare la pagina prima di cercare l'elemento. L'eccezione a ciò sono le richieste asincrone, ma la tua sembra piuttosto sincrona. Intendiamoci, sto usando PHPUnit_Selenium per guidare Selenium – qrazi
Esattamente. In effetti posso fare uno screenshot anche in quel momento, e vedere che sono ancora su example.com/login, ma se dormo per 1 secondo, passa l'assert e lo screenshot mostra che la pagina è ora ad esempio. com/account. Ho letto che PHPUnit_Selenium non era del tutto all'altezza di eseguire Selenium 2 (ovvero il webdriver), ecco perché ho seguito l'approccio sopra descritto. –