我正在使用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
中
答案 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调用取代了单击浏览按钮并选择要上传的文件的位置。如果您在此函数调用后截取屏幕截图,则可以在“浏览...”按钮旁边看到所选文件的名称,就像在手动测试表单时一样。