以下是额外的子弹: 我可以得到我的"按钮"使用以下代码:
$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:这是我的开发者工具的截图。
提前致谢!
答案 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 );
但不是我的“按钮”。
怎么可能?我在这里转发你的其他截图: