Есть ли лучший способ найти элементы для следующего HTML-кода? - PullRequest
1 голос
/ 09 мая 2019

Для кода HTML ниже:

<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>

Я создал локатор xpath для элементов p-группы как

@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\"]")

Мои вопросы:

1. Это работает для меня. Я хотел бы знать, если это правильный способ идентифицировать 3 элемента в p?

2. Есть ли лучший / короткий способ найти эти 3 элемента?

3. Это для элемента "Компания".

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

Спасибо!

Ответы [ 3 ]

3 голосов
/ 09 мая 2019

Если это работает для вас, это хорошая новость.Но всегда есть несколько способов сделать что-то.

  1. Поскольку элемент <input> является непосредственным дочерним элементом элемента <p>, вам не нужна двойная косая черта (//), достаточно одной косой черты (/).
  2. Если нет другого элемента <p> с классом submit_btns, вы можете отказаться от <div> из XPath и напрямую найти элемент <p>.Вот так
@FindBy(xpath="//p['submit_btns']/input[@value='Search']")
Вы можете даже напрямую искать элемент <input>, предполагая, что нет другого элемента <input> с таким же классом или значением.
@FindBy(xpath="//input[@value='Search'][@class='btn green-btn save_search_btn']")
Вы можете использовать селекторы CSS:
@FindBy(css ="input.btn.green-btn.save_search_btn[value='Search']")

Вы можете проверить this и this , найти в Интернете дополнительные ссылки и выбрать одинэто лучше для вас.

0 голосов
/ 09 мая 2019

Учитывая предоставленный HTML, простейшими локаторами будут CSS-селекторы, такие как

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

Поскольку мы не видим всю страницу, возможно, на странице несколько экземпляров этих кнопок. Если это так, вам нужно добавить некоторую информацию, связанную с родителями, в локатор, например

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

Я думаю, что на этих примерах вы можете найти способ упростить ваши локаторы, сохраняя при этом их уникальность.

0 голосов
/ 09 мая 2019

Вы можете сделать

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

или с CSS:

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

Может быть, даже без div (в зависимости от остальной части DOM):

@FindBy(css="input[placeholder='Company']")
@FindBy(css="input[value='Cancel']")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...