Tôi đang sử dụng Watir-Webdriver với Firefox và phương pháp được đề xuất trên trang web watirwebdriver.com để tự động tải xuống tệp. Điều này liên quan đến việc thiết lập FireFox về: các tham số cấu hình để vô hiệu hóa hộp thoại tải xuống trong FireFox cho các loại tệp cụ thể. Điều này hoạt động tốt nhưng bây giờ tôi đang cố gắng tìm ra cách tốt nhất để xác định khi tải xuống tệp đã hoàn thành (một số mất vài giây, một số mất vài phút) để tôi có thể đăng xuất trang và chuyển sang bài kiểm tra tiếp theo. Có vẻ như vì không có manh mối trực quan nào trong trình duyệt, tôi có thể phải theo dõi tệp trong thư mục tải xuống. Bất kỳ tùy chọn nào cũng sẽ được đánh giá cao.Watir-Webdriver Chờ tải xuống để hoàn thành
Trả lời
Có thể bạn có thể theo dõi kích thước tệp để xem thời điểm nó ngừng thay đổi trong vài giây.
Tôi có một cách tiếp cận hơi khác nhau để tự động tải tệp xuống. tôi làm điều đó như thế này:
Các requiures:
require 'rubygems'
require 'watir-webdriver'
require 'win32ole'
Đầu tiên tạo ra một phương pháp cho việc xử lý Dung lượng:
def fileinfo(name)
if File.exists?(name)
print "#{name} exists "
bytes = File.size(name)
print "and is #{bytes} in size;"
whenm = File.mtime(name)
print whenm,";"
print whenm.to_i,";"
else
print "#{name} does NOT exist;"
end
end
Thứ hai lái xe chrome với trước thiết lập tải dir:
download_directory = "#{Dir.pwd}/downloads"
download_directory.gsub!("/", "\\") if Selenium::WebDriver::Platform.windows?
profile = Selenium::WebDriver::Chrome::Profile.new
profile['download.prompt_for_download'] = false
profile['download.default_directory'] = download_directory
Tiếp theo xóa tệp (từ lần chạy trước đó) cho trường hợp kiểm tra lại khả năng sử dụng và validness (một trong số 3):
%x(DEL /Q C:\\automation\\qa\\downloads\\*.exe)
%x(DEL /Q downloads\\*.exe)
%x(DEL /Q downloads\\*.*)
Xác định các biến kích thước của các thành phần tải về:
contains = Dir.new(download_directory).entries
dlc = contains[2]
dcinfo = fileinfo("downloads/"+dlc)
dlcsize = File.size("downloads/"+dlc)
Và cuối cùng bạn có thể bao gồm các điểm xác nhận:
if dlcsize > 0
puts "File found and is #{dlcsize} bytes."
logfile = open("test_results.csv", "a")
begin
logRow = "#{__FILE__}"
logfile.puts logRow + "," + "Passed".to_s
end
else
puts "Test Failed! File not found either is zero."
logfile = open("test_results.csv", "a")
begin
logRow = "#{__FILE__}"
logfile.puts logRow + "," + "Passed".to_s
end
end
Tôi không thích nhìn vào các tập tin, nó cảm thấy mong manh, vì vậy tôi đã kết thúc bằng cách sử dụng lệnh lsof để phát hiện khi không có quy trình nào đang mở tập tin, và sau đó đọc tệp. Nó tốt hơn trong đó tạm dừng trong tải xuống do trục trặc mạng sẽ không gây ra lỗi liên tục, nhưng tệ hơn (?) Ở chỗ nó không phải là di động và vỏ ra lệnh lsof.
Các mã nhìn một cái gì đó như thế này: tải
# Watch the download dir for new files, and read the first new file that
# appears.
def read_newest_download
existing_files = list_files_in_download_dir
new_files = []
Timeout::timeout(DOWNLOAD_TIMEOUT) do
while (new_files = list_files_in_download_dir - existing_files).empty?
sleep 0.25
end
end
if 1 == new_files.size
wait_for_file_to_be_closed(new_files.first)
File.read(new_files.first)
else
fail "Found #{new_files.size} new files."
end
end
# Ignore files ending in .part, which is common for temp files in Firefox.
def list_files_in_download_dir
raise ArgumentError, "No download dir specified" unless @opts[:download_dir]
@_download_glob ||= File.join(@opts[:download_dir], "*")
# Ignore files ending in .part as they're temporary files from Firefox.
Dir[@_download_glob].entries.reject {|e| /\.part$/ === e}
end
def wait_for_file_to_be_closed(filename)
begin
sleep 0.25
end until `lsof #{filename}`.blank?
end
Chrome lưu trữ chưa hoàn thành với thêm một phần mở rộng tập tin .crdownload
. Kiểm tra xem nếu thư mục tải về có một tệp có đuôi .crdownload
và rằng nên cho bạn biết nếu một tải vẫn đang tiếp diễn
The way i xử lý này, là sau
Firefox tải file kết thúc với .part
có tất cả tên tệp được tải xuống trong danh sách sau khi thêm ".phần" đối với họ tiếp tục lặp trên danh sách đó và kiểm tra nếu bất kỳ của những tập tin vẫn còn tồn tại trong lsdir của thư mục tải đang
Python:
import os
import time
def wait_till_download():
if len(new_part_files) > 0:
time.sleep(1)
for part_file in new_part_files:
if part_file in os.listdir("."):
print "Downloading..."
wait_till_download()
lưu ý: khi không có file phần . trong os.listdir('.')
, có nghĩa là tải xong
tôi đã có một nhiệm vụ tương tự mà tôi muốn trích xuất nội dung của một tập tin PDF tải về tôi từng giải pháp sau đây:
t = ''
(0..19).each do
sleep 5
t = `pdftotext -raw some_directory/*.pdf -`
break if $?.success?
end
Có 20 lần thử trích xuất văn bản bằng cách sử dụng lệnh shell pdftotext và sẽ thoát ra khỏi khối nếu lệnh shell thành công. Ưu điểm của việc làm theo cách này là nếu tệp không tồn tại hoặc nếu tệp chỉ được tải xuống một phần, tệp sẽ tạo ra lỗi và sau đó thử lại. Nếu tệp của bạn không phải là tệp PDF hoặc bạn không quan tâm đến nội dung thì bạn sử dụng một lệnh shell khác thay cho pdftotext, miễn là nó tạo ra lỗi nếu tệp không đầy đủ.
- 1. Chờ khối hoàn thành hoàn thành trong yêu cầu AFNetworking
- 2. WebRat + Selenium WebDriver: chờ ajax hoàn thành
- 3. Đang chờ lệnh hoàn thành trong C#
- 4. Tệp theo dõi tải xuống hoàn chỉnh
- 5. python subprocess ẩn stdout và chờ nó để hoàn thành
- 6. Chờ một jQueryanimation để hoàn thành trong vòng lặp for
- 7. Node.js - Chờ cho nhiều chức năng để hoàn thành
- 8. Chờ cho sự kiện nhấp chuột để hoàn thành
- 9. System.IO.File.Move - Làm thế nào để chờ hoàn thành di chuyển?
- 10. tự động đóng firefox khi tải xuống hoàn tất
- 11. Tải xuống tệp hoàn tất gọi lại
- 12. Tải xuốngManager gửi STATUS_SUCCESSFUL để tải xuống không thành công
- 13. Capybara không chờ yêu cầu ajax hoàn thành
- 14. Chờ lệnh shell để hoàn
- 15. Visual Studio Extension: Chờ tất cả các dự án hoàn thành tải với IVsSolutionEvents OnAfterOpenSolution
- 16. Java Đợi thread hoàn thành
- 17. Kiểm tra jQuery khi tải xuống PDF hoàn tất
- 18. Trình duyệt tải xuống sự kiện hoàn chỉnh
- 19. Chờ cho đến khi Application.Calculate đã hoàn thành
- 20. iOS5.1: đồng bộ hóa các tác vụ (chờ hoàn thành)
- 21. Java, Đừng chờ đợi một chuỗi hoàn thành
- 22. Outlook IMAP hoàn thành email và tệp đính kèm tải xuống sự kiện
- 23. kiểm tra xem tải xuống đã hoàn tất chưa
- 24. Chức năng hết thời gian chờ nếu mất quá nhiều thời gian để hoàn thành
- 25. Tải xuống không đồng bộ một đốm màu Azure thành chuỗi có .NET 4.5 async, đang chờ
- 26. Hoàn thành hoạt ảnh "trượt xuống" trong WPF
- 27. tùy chỉnh hộp thả xuống tự động hoàn thành
- 28. iTunes Kết nối: Cách trạng thái ứng dụng hoàn nguyên chờ tải lên để Chuẩn bị tải lên
- 29. Objective-C - Chờ hai phương thức không đồng bộ để hoàn thành
- 30. Làm thế nào để chờ hoàn thành chuỗi trước khi tiếp tục?
Đó là giải pháp duy nhất mà tôi đã tìm thấy. Nó không phải là rất thỏa mãn vì tôi phải theo dõi các tập tin đưa ra cách Firefox xử lý một tải về. Nó hoạt động nhưng không di động khi điều khiển một trình duyệt khác. – user1142012
Bạn cũng có thể gặp sự cố khi kết nối mạng kém ổn định. – encoded