当我使用mink selenium2驱动程序时,我无法遍历该页面。例如,这段代码(以及任何其他find *函数)给出了一条错误消息:
PHP致命错误:在...中调用null成员函数getOuterHtml()
public function test()
{
$this->seleniumSession->visit($this->websiteAddress);
$page = $this->seleniumSession->getPage();
echo $page->findById('feedback_button')->getOuterHtml();
}
另一方面,当我在同一块代码中使用Goutte驱动程序会话时,我得到了HTML。 (没有错误信息)
这就是我创建Selenium2Driver的方式:
$this->seleniumDriver = new Selenium2Driver('firefox', array(
'browserName' => 'firefox',
'version' => '',
'platform' => 'ANY',
'browserVersion' => '56.0',
'browser' => 'firefox',
'name' => 'Behat Test',
'deviceOrientation' => 'portrait',
'deviceType' => 'tablet',
'selenium-version' => '3.6.0'
), 'http://localhost:4444/wd/hub');
我使用的是selenium独立服务器,版本3.6.0。我还注意到,使用Selenium2驱动程序的echo $page->getContent();
比使用Goutte驱动程序(一些不在真实网页源中的其他脚本块)提供了更多HTML。
答案 0 :(得分:1)
Goutte
不支持JavaScript,响应将包含整个页面。
Selenium2Driver
支持JavaScript,您需要等待页面加载,因为某些元素可能稍后可用,对JS的支持可能是您获得更多内容的原因代码。
您应该避免使用此$page->findById('feedback_button')->getOuterHtml();
之类的调用,因为如果找不到该元素,findById
方法将返回null并且在null
上调用方法将导致PHP Fatal error
}
你需要确保元素是可见的,实现一个等待它的方法,或者只是如果find方法返回null抛出一些异常,否则做你必须做的事情。