Tôi đang viết kịch bản lệnh để kiểm tra biểu mẫu tải lên.Cách tải lên tệp bằng watir và IE?
Nhưng tập lệnh không tự động chọn tệp được tải lên từ đĩa cứng của tôi.
Thay vào đó, IE dừng bằng hộp thoại chọn tệp. Ngay khi tôi chọn thủ công tệp được tải lên trong hộp thoại và bấm ok, watir tiếp tục như mong muốn. Tôi tự hỏi tại sao nó dừng lại.
Đây là kịch bản watir tôi:
require 'test/unit'
require 'watir'
# runs on win3k, IE 6.0.3790; ruby 1.8.6, watir
class EpcHomePage < Test::Unit::TestCase
def test_upload
ie = @browser
htmlfile = "C:\\testing\\upload.html"
uploadfile = "C:\\testing\\upload.html"
ie.goto(htmlfile)
ie.file_field(:name,"file1").set(uploadfile)
assert_equal uploadfile, ie.file_field(:name,"file1").value
ie.button(:name, 'upload').click
end
def setup
@browser = Watir::IE.new
end
def teardown
@browser.close
end
end
Tôi đã nhận mã từ trang này: http://wiki.openqa.org/display/WTR/File+Uploads
Đây là hình thức:
<html><body>
<form name="form1" enctype="multipart/form-data" method="post" action="upload.html">
<input type="file" name="file1">
<input type="submit" name="upload" value="ok">
</form>
</body></html>
Tôi đã tìm thấy thủ http://svn.openqa.org/svn/watir/trunk/watir/unittests/filefield_test.rb này cũng có. Tôi đang sử dụng IE 6 và IE 7 cho thử nghiệm.
Edit: Tôi đã tải lên ví dụ đơn giản của tôi ở đây (3 file mà sống trong c: \ thử nghiệm \ trên máy của tôi, chỉ cần bắt đầu file cmd):
http://dl.dropbox.com/u/1508092/testing.rar
Nó không thành công trên 3 các máy khác nhau (tất cả các cửa sổ 2003, 2x IE 6 và 1 x IE 7). Tôi cũng đã thay đổi thời gian ngủ trong script c: \ ruby \ lib \ ruby \ gems \ 1.8 \ gems \ watir-1.6.5 \ lib \ watir \ input_elements.rb từ 1 giây đến 5 giây, như đề xuất bởi Željko Filipin trong câu trả lời của mình:
def set(path_to_file)
assert_exists
require 'watir/windowhelper'
WindowHelper.check_autoit_installed
begin
Thread.new do
sleep 5 # it takes some time for popup to appear
system %{ruby -e '
...
Đây là nơi dừng lại (hãy lưu ý rằng tôi đã điều hướng thủ công thư mục trong hộp thoại tệp một lần). . không có nghĩa là kịch bản được lựa chọn thư mục tôi nghĩ rằng nó có nghĩa là IE luôn luôn hiển thị thư mục cuối cùng mà nó trái):
this is where it stops http://dl.dropbox.com/u/1508092/upload-dialog.JPG
Edit:
tôi thấy rằng rằng mã Ole32 tìm kiếm tiêu đề tiếng Anh:
POPUP_TITLES = [ 'Chọn tập tin', 'Chọn tệp để tải']
Tôi đã cài đặt IE 7 phiên bản tiếng Anh hiện nay. Vẫn không thành công. Nhưng tôi nghĩ rằng nó có một cái gì đó để làm với nội địa hóa, bởi vì input_elements.rb tìm kiếm các tiêu đề cửa sổ. Tôi tự hỏi tại sao nó vẫn thất bại bây giờ. Đây là mã từ input_elements.rb:
class FileField < InputElement
INPUT_TYPES = ["file"]
POPUP_TITLES = ['Choose file', 'Choose File to Upload']
# set the file location in the Choose file dialog in a new process
# will raise a Watir Exception if AutoIt is not correctly installed
def set(path_to_file)
assert_exists
require 'watir/windowhelper'
WindowHelper.check_autoit_installed
begin
Thread.new do
sleep 2 # it takes some time for popup to appear
system %{ruby -e '
require "win32ole"
@autoit = WIN32OLE.new("AutoItX3.Control")
time = Time.now
while (Time.now - time) < 15 # the loop will wait up to 15 seconds for popup to appear
#{POPUP_TITLES.inspect}.each do |popup_title|
next unless @autoit.WinWait(popup_title, "", 1) == 1
@autoit.ControlSetText(popup_title, "", "Edit1", #{path_to_file.inspect})
@autoit.ControlSend(popup_title, "", "Button2", "{ENTER}")
exit
end # each
end # while
'}
end.join(1)
rescue
raise Watir::Exception::WatirException, "Problem accessing Choose file dialog"
end
click
end
end
Văn bản "Chọn tệp" hiện xuất hiện trong tiêu đề IE mới của tôi. Bất cứ điều gì khác cần được bản địa hóa hoặc thay đổi ở đây? Tôi đã cập nhật ảnh chụp màn hình lên phiên bản tiếng Anh.
Tôi sử dụng tệp tải lên với Watir trong Internet Explorer rất nhiều và tôi cũng nhận thấy rằng đôi khi nó không chọn tệp, nhưng nó hoạt động gần như mọi lúc với tôi. Nó không làm việc cho bạn cả? –