如何使用Selenium :: Remote :: Driver Perl包通过Open Windows上传测试文件

时间:2016-04-29 11:02:37

标签: perl selenium testing selenium-webdriver

以下是额外的子弹:  我可以得到我的"按钮"使用以下代码:

 $elem = $driver->find_element('//*[@id="file_uploader"]/div/div/div/div[1]/div[1]/div/span');
     $driver->mouse_move_to_location(element => $elem); # xoffset => x, yoffset => y
     $driver->click_ok('LEFT');
     $driver->pause(3000);

但在那之后,我无法在打开的窗口中看到任何内容。如何上传文件?

PS:这是我的开发者工具的截图。

In Blue

提前致谢!

2 个答案:

答案 0 :(得分:2)

Selenium无法处理操作系统对话框。因此无法处理此对话框。这意味着您需要上传文件而不打开它。 幸运的是Selenium允许用户将文件路径发送到文件输入。这将上传文件。

为了使其工作,您首先需要找到输入元素而不是按钮。它看起来像是:

<input type='file'>

找到此元素后,您可以将文件路径发送给它,就像将文本发送到文本字段一样。我不确定如何在perl中执行此操作,但在Python中,您可以像这样实现它:

element.send_keys('path/to/file')

你可能已经知道perl等价物是什么了。

答案 1 :(得分:0)

事实上,它更具特色。我有两种方法可以在我的Web应用程序中上传文件:

第一位用户可以使用“选择文件”按钮。

其次你可以直接删除文件。 通过第二种方式,并在这里提出的Selenium :: Remote :: Driver包中使用“upload_file”方法,这是可能的。我这样做:

my $fname = "D:/dev/tests/selenium/phantomjs-2.1.1-windows.zip";
my $remote_fname = $driver->upload_file( $fname );
    my $element = $driver->find_element( '//*[@id="file_uploader"]/div/div/div/div[1]/div[2]/input[@class="dx-fileuploader-input"]' );
    $element->send_keys( $remote_fname );

但不是我的“按钮”。

怎么可能?我在这里转发你的其他截图:

In red 'button' and blue 'drop file'