FileField.set("<file_path>") hangs inconsistently and not guranteed to work all 
the time, better workaround/fix included here
-----------------------------------------------------------------------------------------------------------------------------

                 Key: WTR-457
                 URL: http://jira.openqa.org/browse/WTR-457
             Project: Watir
          Issue Type: Improvement
          Components: Inputs
    Affects Versions: 1.6.5, 1.6.2
         Environment: Windows XP SP2, (Ruby 1.8.26, Watir 1.6.2) OR (Ruby 
1.8.7-p299, Watir 1.6.5)
            Reporter: Yogesh Prajapati
            Priority: Blocker
         Attachments: input_elements.rb

When trying trying to upload a file using file input field, I am using the 
WATIR api $ie.file_field(:id, "fileupload").set("#{aFileName.to_s}"), the 
sometimes IE seemed to open "file open" dialog, it will set the file path 
correctly and close the "file open" dialog box fine and the file input field 
get populated correctly with expected file path, but majority of the times the 
dialog box will stay open (hanging) and no file name/path set in "File Name" 
edit field and nothing happens there after.

I kind of played around changing sleep time in 
"input_elements.rb:FileField.set()" method to make it work. What I noticed that 
higher sleeping time made the problem worse.

By understanding little bit more about what the "set()" is trying to do, it 
seemed like a callback method (after file open dialog box pops up). So as it 
says on the line for sleep commands, "it takes some time for popup to appear", 
it sounded like that it is too early to make a sleep call i.e. before launching 
a separate new process to set the file location in dialog. It is apparent that 
the wait (sleep) should rather be done within the new process launched by 
making 'system' call instead of putting the enclosing thread to wait even 
before starting the new process. 

Having said that, by putting the thread to wait before launching new process, 
file open dialog box pops up and entire ruby process waits for manually input 
(to me it meant broken automated workflow) and that's not acceptable.

So the fix to issue of hanging file open dialog box move line "sleep 1..." 
withing system call (i.e. "system %{ruby -e '...." ) just below line 'require 
"win32ole"' and may be increase sleep time to 2 or 4 seconds depending up fast 
or slow machine.

The fix for me with 4 seconds sleep time worked equally good on both slow 
(Pentium4, WinXP SP2) and fast (Core2Duo, WinXP SP2) machines. Please find the 
updated "input_elements.rb" attached here.






-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.openqa.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        
_______________________________________________
Wtr-development mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/wtr-development

Reply via email to