Ngoài việc sử dụng sleep()
trong thử nghiệm của mình, tôi tự hỏi liệu có ai biết chiến lược tốt hơn để chờ gửi biểu mẫu (POST) hoàn tất trước không tiếp tục với các xác nhận của tôi. Đây là một phiên bản rất cô đọng của những gì thử nghiệm của tôi trông giống như, sử dụng phpunit với nhau php-webdriver từ Facebook).php-webdriver: chờ phản hồi của trình duyệt sau khi gửi biểu mẫu bằng cách nhấp vào()
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();
}
Vì vậy, khi bạn thực thi mã này ngay bây giờ, url trong dòng thứ hai đến dòng cuối cùng (xác nhận) cho http://example.com/login thay vì http://example.com/account? Có lẽ máy chủ Selenium phải đợi cho đến khi trang được tải trước khi tìm kiếm phần tử. Ngoại lệ cho đó là các yêu cầu không đồng bộ, nhưng yêu cầu của bạn trông khá đồng bộ. Hãy nhớ bạn, tôi đang sử dụng PHPUnit_Selenium để điều khiển Selenium – qrazi
Chính xác. Trong thực tế, tôi có thể chụp ảnh màn hình tại thời điểm đó và thấy rằng tôi vẫn đang ở trên example.com/login, nhưng nếu tôi ngủ trong 1 giây, xác nhận sẽ chuyển và ảnh chụp màn hình hiển thị trang hiện đang được hiển thị. com/tài khoản. Tôi đọc rằng PHPUnit_Selenium không phải là khá lên để chạy Selenium 2 (aka webdriver) vì vậy đó là lý do tại sao tôi đã đi với cách tiếp cận ở trên. –