Estoy escribiendo un script de watir para probar un formulario de carga.¿Cómo subir un archivo con watir e IE?
Pero la secuencia de comandos no selecciona automáticamente el archivo que se va a cargar desde mi disco duro.
En cambio, IE se detiene con el cuadro de diálogo del selector de archivos abierto. Tan pronto como selecciono manualmente el archivo que se va a cargar en el cuadro de diálogo y hago clic en Aceptar, watir continúa como lo desee. Me pregunto por qué se detiene.
Ésta es mi guión Watir:
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
que tiene el código de esta página: http://wiki.openqa.org/display/WTR/File+Uploads
Ésta es la forma:
<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>
He encontrado este manual http://svn.openqa.org/svn/watir/trunk/watir/unittests/filefield_test.rb también. Estoy usando IE 6 y también IE 7 para las pruebas.
Editar: He subido mi ejemplo simple aquí (3 archivos que viven en c: \ prueba \ en mis máquinas, acaba de empezar el archivo cmd):
http://dl.dropbox.com/u/1508092/testing.rar
falla el 3 de diferentes máquinas (todas las ventanas 2003, 2x IE 6 y 1 x IE 7). También cambié el tiempo de suspensión en el script c: \ ruby \ lib \ ruby \ gems \ 1.8 \ gems \ watir-1.6.5 \ lib \ watir \ input_elements.rb de 1 segundo a 5 segundos, como lo sugirió Željko Filipin en su respuesta:
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 '
...
esto es donde se detiene (tenga en cuenta que yo navegar manualmente al directorio en el diálogo una vez que el archivo partir de ese momento IE siempre muestra el cuadro de diálogo abierto con este directorio, pero que lo haga. . no quiere decir que el guión ha seleccionado el directorio que creo que significa que el IE muestra siempre el último directorio donde la izquierda):
this is where it stops http://dl.dropbox.com/u/1508092/upload-dialog.JPG
Editar:
encontré que que el código OLE32 busca el título de Inglés:
POPUP_TITLES = [ 'Elegir archivo', 'Elegir un archivo para subir']
he instalado IE 7 Versión Inglés ahora. Todavía no hay éxito Pero creo que tiene algo que ver con la localización, porque input_elements.rb busca en los títulos de las ventanas. Me pregunto por qué todavía falla ahora. Este es el código de 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
El texto "Elegir archivo" ahora aparece en el título de mi nuevo IE. ¿Algo más que deba ser localizado o cambiado aquí? Actualicé la captura de pantalla a la versión en inglés.
Uso mucho la carga de archivos con Watir en Internet Explorer, y también he notado que a veces no selecciona el archivo, pero funciona casi todo el tiempo para mí. No funciona para usted en absoluto? –