es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No puedo obtener el valor de opción sin utilizar xpath en Cabybara.

Intentaré explicarlo de nuevo. Tengo que obtener el valor “Arizona” pero solo puedo hacerlo a través de XPath. El elemento se mapeó con: elemento: select_cad_state, "#uniform-id_state". No quiero usar XPath para obtener el valor, quiero usar algo como: select_state.send_keys(DATA[:cad_user][:_state]) ???..etc..etc..

Quiero obtener el valor “Arizona” del archivo users.yml y pasarlo como argumento en la página.

############ código de la página #####################

<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></select></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" (mi problema está aquí)

################# archivo YAML ##################
:cad_user:
  :_password:       457226
  :_company:        SQATest
  :_address:        International Drive 678
  :_city:           Bradenton
  :_state:          Arizona 

################## mi archivo env ###################
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
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para obtener el valor de Arizona para el elemento select_state usando el mapeo :select_cad_state, se puede utilizar el método select de Capybara con el valor de opción como argumento.

    Aquí te mostramos cómo modificar el código:

    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_cad_state,   "#uniform-id_state"
    
      # ...
    
      select(select_state, from: "id_state", visible: false)
    end
    
    # ...
    
    arizona_value = DADOS[:cad_user][:_state]
    screen_cadastro = ScreenCadastro.new
    screen_cadastro.load
    
    screen_cadastro.input_cad_company.set(DADOS[:cad_user][:_company])
    screen_cadastro.input_cad_address.set(DADOS[:cad_user][:_address])
    screen_cadastro.input_cad_city.set(DADOS[:cad_user][:_city])
    
    # Usar el método select de Capybara con el valor de opción como argumento
    screen_cadastro.select_cad_state.select(arizona_value, from: "id_state", visible: false)
    

    Esto debería seleccionar la opción Arizona para el elemento select_state sin utilizar XPath. Ten en cuenta que utilicé el valor “id_state” para el método select, que es el atributo id del elemento select. La opción visible: false se utiliza para seleccionar la opción incluso si no está actualmente visible en la página.

Comments are closed.