Search code examples
rubyselenium-webdriverautomated-testscapybara

I can't get option value without using xpath in Cabybara


I'll try to explain again. I have to get the value Arizone but I'm only getting it via xpath. The element was mapped with: element :select_cad_state, "#uniform-id_state". I don't want to use xpath to get the value Arkansas, I want to use something like: select_state.send_keys(DATA[:cad_user][:_state]) ???..etc..etc..

I want to get the arizona value from the users.yml file and pass it as an argument in the front.

                 ############  code page #####################

<div class="selector" id="uniform-id_state" style="width: 269px;"><span style="width: 259px; user-select: none;">Florida</span><select name="id_state" id="id_state" class="form-control" style="">
                                <option value="">-</option>
                                <option value="1">Alabama</option>
                                <option value="2">Alaska</option>                           
                                <option value="3">Arizona</option>                          
                                <option value="4">Arkansas</option></div>

        ################### my PageObjects #########################
             class ScreenCadastro < SitePrism::Page
                
                  set_url 'http://automationpractice.com/index.php?controller=authentication&back=my-account'
                    element :input_cad_company,                 "#company"
                    element :input_cad_address,                 "#address1"
                    element :input_cad_city,                    "#city"
                    element :select_state,                      "#uniform-id_state" (my problem is here)
                
                ################ yaml file ##############
                :cad_user:
                  :_password:       457226
                  :_company:        SQATest
                  :_address:        International Drive 678
                  :_city:           Bradenton
                  :_state:          Arizona 
                
                ################## my env file ###################
                DADOS = YAML.load(File.open(File.join(File.dirname(__FILE__) + "/massa/users.yml")))
                    
           input_cad_company.send_keys(DADOS[:cad_user][:_company])
           input_cad_address.send_keys(DADOS[:cad_user][:_address])
           input_cad_city.send_keys(DADOS[:cad_user][:_city])
find(:xpath,'/html/body/div/div[2]/div/div[3]/div/div/form/div[2]/p[7]/div/select/option[3]').click 

Solution

  • You are asking about option value, but from all your code it looks like you actually want to select based on the string contents of the option element (not the value). As I posted in my answer to your previous question this should just be

    select_state.select(DADOS[:cad_user][:_state])
    

    If that is not working for you please provide the error message it's giving you.