Search code examples
rubynokogiriweb-testing

Add Nokogiri parse result to variable


I have an XML document:

<cred>
<login>Tove</login>
<pass>Jani</pass>
</cred>

My code is:

require 'nokogiri'
require 'selwet'

context "parse xml" do doc = Nokogiri::XML(File.open("test.xml"))
doc.xpath("cred/login").each do

|char_element|

puts char_element.text

end

should "check" do
Unit.go_to "http://www.ya.ru/"
Unit.click '.b-inline'
Unit.fill '[name="login"]', @login
end

When I run my test I get:

 Tove
 0

But I want to insert the parse result to @login. How can I get variables with the parsing result? Do I need to insert the login and pass values from the XML to fields in the web page?


Solution

  • I'd use something like this to get the values:

    require 'nokogiri'
    
    doc = Nokogiri::XML(<<EOT)
    <cred>
    <login>Tove</login>
    <pass>Jani</pass>
    </cred>
    EOT
    
    login = doc.at('login').text # => "Tove"
    pass = doc.at('pass').text # => "Jani"
    

    Nokogiri makes it really easy to access values using CSS, so use it for readability when possible. The same thing can be done using XPath:

    login = doc.at('//login').text # => "Tove"
    pass = doc.at('//pass').text # => "Jani"
    

    but having to add // twice to accomplish the same thing is usually wasted effort.

    The important part is at, which returns the first occurrence of the target. at allows us to use either CSS or XPath, but CSS is usually less visually noisy.