对于以下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\"]")
谢谢!
答案 0 :(得分:2)
如果对您有用,那就是个好消息。但是总有多种方法可以做事情。
<input>
元素是<p>
元素的直接子元素,因此您不需要双斜杠(//
),因此单斜杠(/
)就足够了。 <p>
类为submit_btns
的元素,则可以从XPath中丢弃<div>
并直接搜索<p>
元素。像这样@FindBy(xpath="//p['submit_btns']/input[@value='Search']")
<input>
元素,甚至可以直接搜索<input>
元素。 @FindBy(xpath="//input[@value='Search'][@class='btn green-btn save_search_btn']")
@FindBy(css ="input.btn.green-btn.save_search_btn[value='Search']")
答案 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']
我认为,通过这些示例,您可以看到一种简化定位器的方法,同时仍保持其唯一性。