我正试图按照本文档执行脚本,但我得到的只是一个错误,说executeScript
方法未定义。
$this->driver->navigateTo('/');
$this->driver->clickElement('#member_opt_in + label');
$this->driver->executeScript("alert('Hi');");
文档使用$session
,并在页面上方表示这是简写,但根本没有解释$session
实际包含的内容或如何分配。
GitHub上的wiki不是最新的php网络驱动程序库,而是引用了它的前一个(2013年之前)版本,但该库从那时起就被从头开始重写了。
要执行Selenium命令,您需要RemoteWebDriver
的实例。在自述文件中可以看到一个例子。
使用$driver
变量中的RemoteWebDriver
实例,可以执行:
$driver->get('http://google.com');
$element = $driver->findElement(WebDriverBy::cssSelector('#member_opt_in + label'));
$elemen->click();
// Execute javascript:
$driver->executeScript('alert("Hi");');
// Or to execute the javascript as non-blocking, ie. asynchronously:
$driver->executeAsyncScript('alert("Hi");');
有关更多信息,请参阅API文档。
对于使用Laravel Dusk的人(在我的情况下,我想点击Facebook模式来测试通过Socialite的联合登录):
use FacebookWebDriverWebDriverBy;
$confirmationButton = $browser->driver->findElement(WebDriverBy::cssSelector('.layerConfirm'));
$browser->driver->executeScript("arguments[0].click();", [$confirmationButton]);
这似乎迫使点击,尽管之前Dusk的截图显示,一个深色(大部分是黑色)半透明层悬停在整个屏幕上,阻止了任何点击(即使在正常的非Dusk尝试中,浏览器中的一切看起来都很好)。
另请参阅:
- https://stackoverflow.com/a/11956130/470749
- https://facebook.github.io/php-webdriver/1.3.0/Facebook/WebDriver/JavaScriptExecutor.html
附言:我后来也意识到,当Facebook模态膨胀/出现时,它有一个奇特的渐变,所以$browser->waitFor('.layerConfirm', 4)
似乎提前启动了,所以我想我可以用pause(2000)
强迫它等待整整2秒才能完成转换(然后根本不需要使用executeScript
)。但是,再多的停顿也无法让模态变得完全可见和可点击。