2016-04-29 105 views
0

下面是額外子彈上傳文件通過打開Windows的測試: 我可以讓我的「按鈕」與下面的代碼:如何使用Selenium ::遠程::驅動程序Perl軟件包

$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

xpost ... http://www.perlmonks.org/?node_id=1161872 – toolic

回答

2

Selenium無法處理操作系統對話框。因此沒有辦法處理這個對話。這意味着您需要上傳文件而不打開它。 幸運的是,Selenium允許用戶將文件路徑發送到文件輸入。這會上傳文件。

爲了使它工作,您首先需要找到輸入元素而不是按鈕。它會是這個樣子:

<input type='file'> 

一旦你找到了這個元素,你可以將文件路徑發送給它就像你發送任何文字到一個文本框。我不知道如何在Perl中做到這一點,但在Python中,你可以這樣實現它:

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

你可能知道自己的perl的等效是什麼。

+1

很好的答案。你可以通過添加一個關於如何在Perl中完成它的參考[https://metacpan.org/pod/Selenium::Remote::Driver#upload_file]來改進它。 :) – simbabque

+0

我沒有輸入。我怎麼能做不同? – Chaoui05

+1

@ Chaoui05任何機會,你可以編輯你原來的問題,並添加相關的HTML。以這種方式幫助你會更容易。 – RemcoW

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'

相關問題