【问题标题】:Selenium Webdriver PHPUnit: Possible to wait on whole function instead of element?Selenium Webdriver PHPUnit:可以等待整个函数而不是元素?
【发布时间】:2014-03-26 12:17:08
【问题描述】:

所以有很多方法可以让 selenium 等待,例如

sleep(1); // sleeps for 1 second

while ($this->conditionIsFalse()) { sleep(500); }

waitForPageElement

等等... 这些是针对特定元素的,但是是否可以创建一个脚本,以便 selenium 无论如何都等待每个元素?或页面加载等...

所以基本上它适用于整个功能,而不仅仅是您正在寻找的当前元素。如果您在一个页面或多个页面上搜索 50 多个项目,我宁愿让 selenium 等待每次搜索后写入的每个页面加载/元素 waitForPageElement ...

这样的事情可能吗?

【问题讨论】:

    标签: php selenium


    【解决方案1】:

    所有元素都有隐式等待

    function setUpPage() {
        $this->timeouts()->implicitWait(25000);
    }
    

    Selenium docs:

    隐式等待是告诉 WebDriver 轮询 DOM 尝试查找一个或多个元素(如果它们是)时的时间量 无法立即使用。默认设置为 0。一旦设置, 为 WebDriver 对象实例的生命周期设置了隐式等待。

    此外,您始终可以编写一个新函数来等待每个元素,并使用它来代替默认方法。

    protected function _waitAndFind($selector) {
            $element = $this->waitUntil(function($testCase) use ($selector) {
                try {
                    $element = $testCase->_byQuery($selector);
                    if ($element->displayed()) {
                        return $element;
                    }
                } catch (PHPUnit_Extensions_Selenium2TestCase_WebDriverException $e) {}
            }, 8000);
            return $element;
    }
    

    【讨论】:

    • 如果可能的话,我会避免隐式等待。 implicitWait 将使我们更容易编写糟糕的代码。例如,它允许我们编写不处理竞争条件的代码。
    • @whhone 除了implicitwaits,你还有什么建议?
    猜你喜欢
    • 1970-01-01
    • 2018-02-19
    • 2013-08-06
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    相关资源
    最近更新 更多