使用Facebook PHP WebDriver在Selenium中执行javascript



我正试图按照本文档执行脚本,但我得到的只是一个错误,说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)。但是,再多的停顿也无法让模态变得完全可见和可点击。

最新更新