有没有更好的方法来查找以下HTML代码的元素?

时间:2019-05-09 13:06:55

标签: selenium-webdriver xpath

对于以下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>

我为p个组元素创建了xpath定位符,

@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。 这对我有用。我想知道这是否是识别p下的3个元素的正确方法吗?

2。 是否有更好/更短的方法来定位这三个元素?

3。 这是针对“公司”元素的。

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

谢谢!

3 个答案:

答案 0 :(得分:2)

如果对您有用,那就是个好消息。但是总有多种方法可以做事情。

  1. 由于<input>元素是<p>元素的直接子元素,因此您不需要双斜杠(//),因此单斜杠(/)就足够了。
  2. 如果没有其他<p>类为submit_btns的元素,则可以从XPath中丢弃<div>并直接搜索<p>元素。像这样
@FindBy(xpath="//p['submit_btns']/input[@value='Search']")
  1. 您甚至可以假设没有其他具有相同类或值的<input>元素,甚至可以直接搜索<input>元素。
@FindBy(xpath="//input[@value='Search'][@class='btn green-btn save_search_btn']")
  1. 您可以使用CSS选择器:
@FindBy(css ="input.btn.green-btn.save_search_btn[value='Search']")

您可以检查thisthis并在网上搜索更多参考,然后选择最适合您的参考。

答案 1 :(得分:1)

您可以

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

答案 2 :(得分:1)

鉴于提供的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']

我认为,通过这些示例,您可以看到一种简化定位器的方法,同时仍保持其唯一性。