2016-12-21 27 views
0

我期待文件添加到<input type="file">有沒有什麼特別的文件類型輸入,使它無法找到?

下面是HTML

<span class="btn btn-xs btn-primary btn-file"> #found 
    <span class="blahicon blahicon-upload"></span> 
    Browse 
    <input type="file" data-bind="value: fileName, event: { change: uploadImagesOnChange }" 
    accept="blah/txt" multiple=""> #not found 
</span> 

的片段和這裏的水豚和紅寶石

within_frame('frame1') do 
    within_frame('frame2') do 
    within(:xpath, [containing span xpath]) do # finds this 
     find(:xpath, './/*[@type="file"]').send_keys('C:\Users\...\blah.txt') #ElementNotFound 
    end 
    end 
end 

我看不出有什麼隱藏的塊,它的超範圍。有什麼想法嗎?

+0

我還應該添加find選擇器在螢火蟲 – TangibleDream

+0

如果你在一個真實的瀏覽器中看,你可能會看到實際的文件輸入是隱藏或透明的 - 確切的錯誤是什麼? –

+0

查看源代碼檢查嗎? ElementNotFound,明天我會發布 – TangibleDream

回答

0

而不是使用within(:xpath, [containing span xpath])你能直接檢查一樣輸入的XPath:has_xpath?(".//span[contains(text(),'Browse')]/input") ,如果它返回true,則使用 find(:xpath, ".//span[contains(text(),'Browse')]/input").send_keys ('C:\Users\...\blah.txt')

嘗試如果您知道有關「撬」的寶石,那麼你可以調試這個東西通過嘗試各種xpath組合而不是僅僅運行整個腳本,所以你將會知道實際的問題。

0

我認爲這是錯誤在你的XPath

.//*[@type="file"]

更改爲

.//*[@type='file']

的瀏覽器可以檢測用雙引號(」「),但你需要內部腳本屬性值用於單引號('')

也可以做成不同的組合您的XPath像

//input[@type='file']

0

通過對包裝類的類btn-file來看的,這是可能的,你正在使用的引導和「標準」的方法之一隱藏實際的文件輸入元素,以便它可以是在多個瀏覽器中風格相同。隱藏按鈕的方法有很多種,只是將其設置爲顯示:其中沒有任何方法,而是將其展開爲與替換按鈕相同尺寸的更「現代」方法,並將其不透明度設置爲0,從而成爲透明覆蓋層替代。

在Capybara中處理這種設置的基本策略是使用execute_script使元素首先可見,然後使用attach_fileset正常。舉例來說,如果您的站點使用躲在你可以做類似

within_frame('frame1') do 
    within_frame('frame2') do 
    within(:xpath, [containing span xpath]) do # finds this 
     file_input = find(:file, visible: :all) 
     page.driver.browser.execute_script("$(arguments[0]).css('opacity',1)", file_input.native)   
     file_input.set('C:\Users\...\blah.txt') 
    end 
    end 
end 

注意文件元素的透明度方法 - 此代碼假設你在你的網頁使用jQuery,將與硒的驅動程序,因爲它只能工作使用硒驅動程序的特定功能在execute_script調用中將元素從水豚傳遞到硒。如果不使用jQuery,則JS需要更改,如果使用其他驅動程序,則需要使用DOM方法在JS腳本中查找元素,然後修改其不透明度。

相關問題