I’m working on a project to practice test automation. So, I’ve choose WordPress.org framework and integrated cucumber + selenium web driver.
New Media Feature:
Feature Screenshot:
Html Source Code:
<<span class="pl-ent">p</span> <span class="pl-e">id</span>=<span class="pl-s1"><span class="pl-pds">"</span>async-upload-wrap<span class="pl-pds">"</span></span>></div> <div id="file-upload-html-LC2" class="line"><<span class="pl-ent">label</span> <span class="pl-e">for</span>=<span class="pl-s1"><span class="pl-pds">"</span>async-upload<span class="pl-pds">"</span></span> <span class="pl-e">class</span>=<span class="pl-s1"><span class="pl-pds">"</span>screen-reader-text<span class="pl-pds">"</span></span>>Upload</<span class="pl-ent">label</span>></div> <div id="file-upload-html-LC3" class="line"><<span class="pl-ent">input</span> <span class="pl-e">type</span>=<span class="pl-s1"><span class="pl-pds">"</span>file<span class="pl-pds">"</span></span> <span class="pl-e">id</span>=<span class="pl-s1"><span class="pl-pds">"</span>async-upload<span class="pl-pds">"</span></span> <span class="pl-e">name</span>=<span class="pl-s1"><span class="pl-pds">"</span>async-upload<span class="pl-pds">"</span></span>></div> <div id="file-upload-html-LC4" class="line"><<span class="pl-ent">input</span> <span class="pl-e">type</span>=<span class="pl-s1"><span class="pl-pds">"</span>submit<span class="pl-pds">"</span></span> <span class="pl-e">value</span>=<span class="pl-s1"><span class="pl-pds">"</span>Upload<span class="pl-pds">"</span></span> <span class="pl-e">class</span>=<span class="pl-s1"><span class="pl-pds">"</span>button<span class="pl-pds">"</span></span> <span class="pl-e">id</span>=<span class="pl-s1"><span class="pl-pds">"</span>html-upload<span class="pl-pds">"</span></span> <span class="pl-e">name</span>=<span class="pl-s1"><span class="pl-pds">"</span>html-upload<span class="pl-pds">"</span></span>></div> <div id="file-upload-html-LC5" class="line"><<span class="pl-ent">a</span> <span class="pl-e">onclick</span>=<span class="pl-s1"><span class="pl-pds">"</span>try{top.tb_remove();}catch(e){}; return false;<span class="pl-pds">"</span></span> <span class="pl-e">href</span>=<span class="pl-s1"><span class="pl-pds">"</span>#<span class="pl-pds">"</span></span>>Cancel</<span class="pl-ent">a</span>></div> <div id="file-upload-html-LC6" class="line"></<span class="pl-ent">p</span>></div> <div class="line"></div> <div id="file-upload-html-LC7" class="line">
Now, in step definitions I can write this – to directly show the local file (images, pdf, locations)
Step_definitions:
</div> <div class="line">When "I upload a file" do</div> <div id="file-upload_steps-LC2" class="line">attach_file('file','features/upload_files/theme-unit-test-data.xml')</div> <div id="file-upload_steps-LC3" class="line">end</div> <div class="line">
Media-lib.feature
</div> <div class="line">When I upload a file</div> </div> <div class="line">
It works as we have type=”file” and finds and system uploads file to system
Now if we go that way, sometimes it will not work. If we look that source code
Importing XML File:
Source Code Html:
</div> <p> <label for="upload">Choose a file from your computer:</label> (Maximum size: 32 MB) <input type="file" size="25" name="import" id="upload"> <input type="hidden" value="save" name="action"> <input type="hidden" value="33554432" name="max_file_size"> </p>
Now, in that case, I found it go confused and I needed generic solution to test.
Step definitions:
When /^I upload a "(.+)" file with "(.+)" and located at "(.+)"$/ do |file_name, name_selector, path| attach_file(name_selector, "#{path}/#{file_name}") end
Upload.features
And I upload a "theme-unit-test-data.xml" file with "file" and located at "/Users/sakib/Documents/projects/wp-automation/features/upload_files"
Pre-requirement:
- WordPress.org (Configured and execute on local server)
- Cucumber
- Capybara