如何使用PHP和Facebook WebDriver上传文件?

时间:2018-12-23 22:15:23

标签: php selenium selenium-webdriver behat

我正在使用Facebook WebDriver在Selenium中使用PHP和Behat(没有水貂)。我正在处理我的最后一个测试用例,该用例是上载保存在计算机上(使用Mac)的本地文件(图像)。如何使用PHP和Facebook WebDriver上传文件?

我得到“上传”按钮的元素,然后弹出菜单选择文件。

$this>webDriver>setFileDetector(new\Facebook\WebDriver\Remote\LocalFileDetector());

// upload the file and submit the form
$this>webDriver>getKeyboard()>sendKeys("/Users/Guest/Documents/image.jpg/;

但这不起作用。

我也收到此错误:

  

致命错误:未捕获错误:调用未定义方法Facebook \ WebDriver \ Remote \ RemoteWebDriver :: setFileDetector()在/Users/Guest/Documents/features/bootstrap/FeatureContext.php:232

2 个答案:

答案 0 :(得分:1)

考虑以下html元素。

<input type="file" id="file_input"></input>

您的上传代码如下:

<?php    
use Facebook\WebDriver\Remote\LocalFileDetector;

//getting the input element
$fileInput = $driver->findElement(WebDriverBy::id('file_input'));

//set the fileDetector
$fileInput->setFileDetector(new LocalFileDetector());

$filePath = 'D:\\work\\udhav.pdf';
$fileInput->sendKeys($filePath);

答案 1 :(得分:0)

setFileDetector是RemoteWebElement类(而不是RemoteWebDriver类)上的方法。您必须找到该元素,然后在其上调用setFileDetector()。参见以下示例:

来源:https://github.com/facebook/php-webdriver/wiki/Upload-a-file

  // getting the input element
  $fileInput = $driver->findElement(WebDriverBy::id('file_input'));
  // set the file detector
  $fileInput->setFileDetector(new LocalFileDetector());
  // upload the file and submit the form
  $fileInput->sendKeys($filePath)->submit();

注释:“ $ fileInput-> sendKeys($ filePath)-> submit();行)不适用于我,并导致错误。我删除了“提交”功能调用,并使它起作用:“ $ fileInput-> sendKeys($ filePath);”。在此行之后,您将想要找到表单提交按钮,然后像单击其他任何表单一样单击它。这个sendKeys调用取代了单击浏览按钮并选择要上传的文件的位置。如果您在此函数调用后截取屏幕截图,则可以在“浏览...”按钮旁边看到所选文件的名称,就像在手动测试表单时一样。

链接到有关该方法的文档: https://facebook.github.io/php-webdriver/community/Facebook/WebDriver/Remote/RemoteWebElement.html#method_setFileDetector