背景:我在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]
这是页面上第二次出现的文字。一种可能可接受的方法,即检查是否存在文本中的两个文本,而不是第二个文本。所以我可能会尝试这种方法。任何其他见解仍然受欢迎。
答案 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.