如何使用Selenium WebDriver(java)和Chrome验证特定<div>标记下的文本是否存在?</div>

时间:2014-01-09 17:24:27

标签: java html selenium xpath selenium-webdriver

背景:我在Java中使用Selenium WebDriver并使用谷歌浏览器作为我的浏览器。

所以我对这个不太确定。我知道如何弄清楚页面上是否存在特定文本,但是如果我想找到多个文本实例呢?例如,如果单词“Hello”位于页面顶部,并且在展开元素时也出现单词“Hello”,那么如何在不完全指定其xpath的情况下验证第二个“Hello”是否存在?

例如:

WebDriverWait wait = new WebDriverWait(driver, WAIT_TIME);
foundElement = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[contains(text(),'" + expectedText + "')]")));

...这将获得我正在寻找的文本的第一个实例...但是如果我正在寻找另一个特定实例(第3,第4)呢?

尝试使用以下内容进行避免:

WebDriverWait wait = new WebDriverWait(driver, WAIT_TIME);
foundElement = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("(//*[contains(text(),'" + expectedText + "')])[2]")));

最好我想尝试指定它所在的元素。有什么想法吗?

我对xpath并不是很熟悉......但是假设我想做一些像这样的事情(我已经知道这是无效的/不起作用):

WebElement foundElement = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"elementID\"]/[contains(text(),'" + text + "')]")));

我希望这是有道理的!如果需要澄清,请告诉我。

小更新:

我试过这个无济于事:

WebElement foundElement = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"elementID\"]/*/[contains(text(),'" + text + "')]")));

以下是包含我要查找的文字的路径:

//*[@id="Highchart_chart_property_hot_alerts"]/div[1]/div[1]

这是页面上第二次出现的文字。一种可能可接受的方法,即检查是否存在文本中的两个文本,而不是第二个文本。所以我可能会尝试这种方法。任何其他见解仍然受欢迎。

2 个答案:

答案 0 :(得分:1)

假设您的基本HTML是:

<table id='bar'>
  <tr>
    <td>
      <div>
        <div class="foo">hello</div>
        <div>world</div>
      </div>
    </td>
  </tr>
</table>

您需要始终指定要在xpath中查找的标记类型。因此使用//table/tr/td/div/[@class='foo']将无效。另外/*/不是很有用,因为//表示“跳过任意数量的孩子及其子女等等”。因此,您需要://table[@id='bar']//div[@class='foo']

因此,就您的问题而言,解决方案似乎是:

By locator = By.xpath("//*[@id='Highchart_chart_property_hot_alerts']//div[contains(text(),'" + text + "')]");
WebElement foundElement = waitAndFindElement(locator);

private WebElement waitAndFindElement(By locator) {
  WebDriverWait wait = new WebDriverWait(driver, WAIT_TIME);
  return wait.until(ExpectedConditions.presenceOfElementLocated(locator)));
}

答案 1 :(得分:0)

方法:

获取索引:

div的CSS选择器包含Text&#34; Hello&#34;:css = div:contains(&#34; Hello&#34;)

List<WebElement> texts = driver.findElements(By.cssSelector("div:contains('Hello')"));

if(texts.get(2).getText().equals("hello")

    // Then Second Element that contains the Text Hello is present.

else 

    // Not Present.