以下是附加项目符号:我可以用以下代码获得我的"按钮":
$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);
但在那之后,我在出现的"打开的窗口"中什么都找不到。如何上传文件?
附言:这是我的开发工具的截图。
蓝色
提前感谢!
Selenium无法处理操作系统对话框。因此,没有办法处理这个对话框。这意味着您需要在不打开文件的情况下上传文件。幸运的是,Selenium允许用户向文件输入发送文件路径。这将上载文件。
为了使它发挥作用,您首先需要找到输入元素而不是按钮。它看起来像:
<input type='file'>
一旦找到这个元素,就可以将文件路径发送到它,就像将任何文本发送到文本字段一样。我不知道如何在perl中做到这一点,但在Python中,你可以这样实现:
element.send_keys('path/to/file')
您可能知道perl的等价物是什么。
事实上,它更具体。我有两种方法在我的网络应用程序中上传文件:
第一个用户可以使用"选择文件"按钮。
第二,您可以直接删除文件。第二种方法是,在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 );
但不是用我的"按钮"。
这怎么可能?我在这里转发给你更多的截图:
红色"按钮"和蓝色"放置文件"中的