Para el código HTML a continuación:

<div class="advcd_fields form">

other <div> and <p> elements...

   <p><input type="text" class="field" name="" placeholder="Company"></p>
   <p class="submit_btns"> 
      <input type="submit" class="btn" name="" value="Search">
      <input type="submit" class="btn green-btn save_search_btn" name="" value="Save search">
      <input type="submit" class="btn cancel-btn s_close" name="" value="Cancel">
   </p>
</div>

He creado el localizador xpath para elementos de grupo p como

@FindBy(xpath="//div[@class=\"advcd_fields form\"]//p//input[@value=\"Search\"]")

@FindBy(xpath="//div[@class=\"advcd_fields form\"]//p//input[@value=\"Save search\"]")

@FindBy(xpath="//div[@class=\"advcd_fields form\"]//p//input[@value=\"Cancel\"]")

Mis preguntas:

1) Esto es trabajo para mí. Me gustaría saber si esta es la forma correcta de identificar los 3 elementos en p.

2. ¿Hay alguna forma mejor / corta de localizar estos 3 elementos?

3. Esto es para el elemento "Empresa".

@FindBy(xpath="//div[@class=\"advcd_fields form\"]//p//input[@placeholder=\"Company\"]")

¡Gracias!

1
ViTest 9 may. 2019 a las 16:06

3 respuestas

La mejor respuesta

Si está funcionando para ti es una gran noticia. Pero siempre hay múltiples formas de hacer las cosas.

  1. Como el elemento <input> es el elemento secundario inmediato del elemento <p>, no necesita la barra doble (//), una barra simple (/) sería suficiente.
  2. Si no hay otro elemento <p> con la clase submit_btns, puede descartar el <div> del XPath y buscar directamente el elemento <p>. Me gusta esto,
@FindBy(xpath="//p['submit_btns']/input[@value='Search']")
  1. Incluso podría buscar directamente el elemento <input> suponiendo que no haya otro elemento <input> con la misma clase o valor.
@FindBy(xpath="//input[@value='Search'][@class='btn green-btn save_search_btn']")
  1. Podrías usar selectores CSS:
@FindBy(css ="input.btn.green-btn.save_search_btn[value='Search']")

Puede verificar this y this y busque en la web más referencias y elija la que sea mejor para usted.

3
S Ahmed 9 may. 2019 a las 14:05

Usted puede hacer

@FindBy(xpath="//div[@class='advcd_fields form']//input[@placeholder='Company']")
@FindBy(xpath="//div[@class='advcd_fields form']/'/input[@value='Cancel']")

O con CSS:

@FindBy(css="div.advcd_fields.form input[placeholder='Company']")
@FindBy(css="div.advcd_fields.form input[value='Cancel']")

Tal vez incluso sin el div (dependiendo del resto del DOM):

@FindBy(css="input[placeholder='Company']")
@FindBy(css="input[value='Cancel']")
0
Mate Mrše 9 may. 2019 a las 13:58

Dado el HTML proporcionado, los localizadores más simples serían selectores CSS como

input[value='Search']
input[value='Save search']
input[value='Cancel']

Como no podemos ver la página completa, es posible que haya varias instancias de estos botones en la página. Si ese es el caso, deberá agregar información relacionada con los padres al localizador como

div.advcd_fields input[value='Search']
div.advcd_fields input[value='Save search']
div.advcd_fields input[value='Cancel']

Creo que con estos ejemplos puede ver una manera de simplificar sus localizadores mientras los mantiene únicos.

0
JeffC 9 may. 2019 a las 16:43