2

我正在尝试按照此文档执行脚本,但我得到的只是一个错误,说明该executeScript方法未定义。

$this->driver->navigateTo('/');
$this->driver->clickElement('#member_opt_in + label');
$this->driver->executeScript("alert('Hi');");

文档使用$session, 并在页面上方说这是速记,但根本没有解释$session实际包含的内容或如何分配它。

4

2 回答 2

4

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 文档

于 2016-08-05T20:50:58.513 回答
1

对于使用 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)。但是没有多少停顿让模态变得完全可见和可点击。

于 2019-02-27T20:56:34.093 回答