Behat + selenium 2 等待页面加载

Behat + selenium 2 wait for page to load

在使用 Selenium2Driver 将 Behat 与 Mink 结合使用时,有没有办法可靠地等待页面加载?

我继承了一些像这样等待的遗留测试:

Background:
  Given I am on "http://test.example.com"
  And I wait for "20000"
  Given I click on the element with css selector ".button1"
  And I wait for "30000"
  Given I click on the element with css selector ".button2"
  And I wait for "30000"
  Given I click on the element with css selector ".button1"
  And I wait for "10000"

即仅此一项测试需要 1 分 30 秒。

我想做的是有一种通用的方法来等待上一次点击导致页面加载,而不必每次都等待大量固定时间。

我看到的所有关于等待页面加载的建议,都是指检查特定页面元素是否已加载。

然而,这些测试 运行 针对各种遗留网站,这些网站并不总是可以检查是否存在标准元素,因此我希望使用更通用的方法。

您可以使用具有 javascript 条件的等待方法,例如:

/**
 * @When /^wait for the page to be loaded$/
 */
public function waitForThePageToBeLoaded()
{
    $this->getSession()->wait(10000, "document.readyState === 'complete'");
}

另一个好的做法是有一个等待元素的方法,如果找到元素 returns 元素对象,否则它会抛出异常。

点击方法可以是这样的:

$this->waitForElement("css_selector")->click();