Selenium提取通过Java中的文本找到的元素的ID

时间:2016-09-01 21:04:36

标签: java selenium xpath cucumber

我希望使用selenium和Chrome执行一组Cucumber测试。我的大部分测试都很好。我目前正试图对一个特定步骤进行参数化,以便任何使用Test的人都可以简单地命名他们想要的元素,测试就会找到它们。

Cucumber测试看起来像这样:

When I go to the "Inventory" / "Inventory" application

And I search the "Description" field for "a"  

我能够非常轻松地将when语句设置为参数化,但And语句给我带来了更多麻烦。页面本身有几组具有一致id方案的表。带有“Description”一词的标题的xpath如下所示:

//label[@id='m6a7dfd2f_ttrow_[C:2]_ttitle-lb']

并且输入字段具有此xpath

//td[@id='m6a7dfd2f_tfrow_[C:2]-c']/input

作为参考,位于标签室下方的下一个输入字段具有此xpath

//td[@id='m6a7dfd2f_tfrow_[C:3]-c']/input

所以每个标签和输入字段都有相同的id方案,只有“c:”后面的数字似乎有所改变。该数字对于标签和相应的输入值都是相同的。我想知道如何扫描页面中的“描述”一词,并提取与其关联的元素的ID,然后将其截断为数字。我已经设置了变量以保留其余部分,希望如下:

@When("^I search the \"([^\"]*)\" field for \"([^\"]*)\"$")
public void i_search_the_field_for(String searchField, String searchItem) throws Throwable {
String baseinputXPath = "//td[@id='m6a7dfd2f_tfrow_[c:";
String endinputXPath = "]-c']/input";
String elementNumber = "The return of some sort of method based on searchField";//TODO
driver.findElement(By.xpath(baseinputXPath + elementNumber + endinputXPath)).clear();
driver.findElement(By.xpath(baseinputXPath + elementNumber + endinputXPath)).sendKeys(searchItem);
driver.findElement(By.id("search_button_img")).click();

如果有办法仅根据描述文字提取该数字,那将非常有用。

1 个答案:

答案 0 :(得分:0)

使用xpath搜索带有单词'描述'的WebElement。在标签标签中。

"//label[text(),'Description']" or "//label[.='Description']" or "//label[contains(text(),'Description')]"

使用getAttribute("id")获取ID。