一尘不染

Behat + Selenium 2等待页面加载

selenium

使用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秒。

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

我可以看到等待页面加载的所有建议,都涉及检查是否已加载特定页面元素。

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


阅读 239

收藏
2020-06-26

共1个答案

一尘不染

您可以将等待方法与javasccript条件一起使用,例如:

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

另一个好的做法是有一个等待元素的方法,如果找到元素则返回元素对象,否则它将引发异常。

对于click方法,您可以具有以下内容:

$this->waitForElement("css_selector")->click();
2020-06-26