【发布时间】:2014-01-28 09:45:53
【问题描述】:
背景:我在 Java 中使用 Selenium WebDriver,并使用 Google Chrome 作为我的浏览器。
所以我不太确定这个。我知道如何确定页面上是否存在特定文本,但是如果我想查找多个文本实例怎么办?例如,如果“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]
这是页面上文本的第二次出现。查找是否存在的一种可能可接受的方法是检查两个文本是否都存在,而不是仅第二个文本。所以我可能会尝试这种方法。任何其他见解仍然欢迎。
【问题讨论】:
-
By.xpath("//*[@id='elementID']/*[contains(text(),'" + text + "')]")看起来完全有效,为什么它不起作用? -
我想可能是因为我正在寻找的文本有点深。我收到了一个超时异常。我的问题是我试图让它尽可能通用,以便适应很多情况。这是我要查找的文本的完整 xpath: //*[@id="elementID"]/div[1]/div[1] 理想情况下,我想避免使用比 elementID 更远的任何内容。
-
您可以发布您有兴趣查找的元素的示例 html 吗?
-
@nilesh 我相应地更新了问题。这有帮助吗?感谢你们花时间研究我的问题!
-
我不是在寻找 xpath。我正在寻找html。您为“Hello”的第二个实例发布的 xpath 是吗?你能找到第一个“Hello”实例吗?
标签: java html selenium xpath selenium-webdriver