我正在尝试按照此文档执行脚本,但我得到的只是一个错误,说明该executeScript
方法未定义。
$this->driver->navigateTo('/');
$this->driver->clickElement('#member_opt_in + label');
$this->driver->executeScript("alert('Hi');");
文档使用$session
, 并在页面上方说这是速记,但根本没有解释$session
实际包含的内容或如何分配它。
我正在尝试按照此文档执行脚本,但我得到的只是一个错误,说明该executeScript
方法未定义。
$this->driver->navigateTo('/');
$this->driver->clickElement('#member_opt_in + label');
$this->driver->executeScript("alert('Hi');");
文档使用$session
, 并在页面上方说这是速记,但根本没有解释$session
实际包含的内容或如何分配它。
GitHub 上的wiki与当前的 php-webdriver 库不是最新的,而是引用了它的先前(2013 年之前)版本 - 但该库是从头开始重写的。
要执行 Selenium 命令,您需要RemoteWebDriver
. 可以在自述文件中看到一个示例。
使用变量中RemoteWebDriver
的实例,$driver
您可以执行:
$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 Facebook\WebDriver\WebDriverBy;
$confirmationButton = $browser->driver->findElement(WebDriverBy::cssSelector('.layerConfirm'));
$browser->driver->executeScript("arguments[0].click();", [$confirmationButton]);
即使之前来自 Dusk 的屏幕截图显示黑色(大部分为黑色)半透明层悬停在整个屏幕上,这似乎强制点击,阻止任何点击(即使在正常的非 Dusk 尝试中,浏览器中的一切看起来都很好) .
也可以看看:
PS我后来也意识到Facebook模式在膨胀/出现时有一个花哨的渐变过渡,所以它似乎$browser->waitFor('.layerConfirm', 4)
过早地触发了,所以我想我可以改为pause(2000)
强制它等待整整2秒以过渡到完成(然后根本不需要使用executeScript
)。但是没有多少停顿让模态变得完全可见和可点击。