Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何验证特定<;部门>;使用SeleniumWebDriver(java)和Chrome标记?_Java_Html_Selenium_Xpath_Selenium Webdriver - Fatal编程技术网

如何验证特定<;部门>;使用SeleniumWebDriver(java)和Chrome标记?

如何验证特定<;部门>;使用SeleniumWebDriver(java)和Chrome标记?,java,html,selenium,xpath,selenium-webdriver,Java,Html,Selenium,Xpath,Selenium Webdriver,背景:我在Java中使用SeleniumWebDriver,并使用GoogleChrome作为我的浏览器 所以我对这个不太确定。我知道如何判断页面上是否存在特定的文本,但是如果有多个我想要查找的文本实例呢?例如,如果单词“Hello”位于页面顶部,并且单词“Hello”在展开元素时也会出现,那么在不完全指定其xpath的情况下,我如何验证第二个“Hello”是否存在 例如: WebDriverWait wait = new WebDriverWait(driver, WAIT_TIME); fo

背景:我在Java中使用SeleniumWebDriver,并使用GoogleChrome作为我的浏览器

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

例如:

WebDriverWait wait = new WebDriverWait(driver, WAIT_TIME);
foundElement = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[contains(text(),'" + expectedText + "')]")));
…这将获得我正在查找的文本的第一个实例…但是如果我正在查找另一个特定实例(第三个、第四个),该怎么办

尝试避免使用类似以下内容:

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 + "')]")));
以下是包含我试图查找的文本的路径:

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

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

假设您的基本HTML是:

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

通过获取索引:

包含文本“Hello”的div的CSS选择器:CSS=div:contains(“Hello”)

List text=driver.findElements(By.cssSelector(“div:contains('Hello')));
if(text.get(2.getText().equals)(“hello”)
//然后出现包含文本Hello的第二个元素。
其他的
//不在场。

By.xpath(“/*[@id='elementID']/*[contains(text(),'“+text+”)]”)
看起来非常有效,为什么不起作用呢?我想可能是因为我要查找的文本有点深。我收到了一个TimeoutException。我的问题是,我正试图让它尽可能通用,以适应多种情况。以下是我要查找的文本的完整xpath://*[@id=“elementID”]/div[1]/div[1]理想情况下,我希望避免使用elementID以外的任何内容。你能发布你感兴趣的元素的html示例吗?@nilesh我相应地更新了问题。这有帮助吗?感谢你们两位花时间研究我的问题!我不是在找xpath。我是在找html。你发布的是第二个元素的xpath吗“Hello”的实例?你能找到第一个“Hello”实例吗?很好?很好!解释得很清楚,非常感谢!实际上,我想//div[text()[contains('text')]]在某些情况下,上面的答案可能不适用。可能,但他说他有多个hello的实例,只需要一个特定的实例,因此您可以捕获任何带有文本的div,因此可能会匹配其中一个或所有示例。很难说没有看到实际的HTML源代码。
<table id='bar'>
  <tr>
    <td>
      <div>
        <div class="foo">hello</div>
        <div>world</div>
      </div>
    </td>
  </tr>
</table>
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)));
}
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.