【问题标题】:Getting the Xpath of a span web element获取跨度 Web 元素的 Xpath
【发布时间】:2018-08-08 10:48:48
【问题描述】:

我有以下 HTML 代码:

我需要参考 span 元素(树中的最后一个元素)以检查它是否存在。 问题是,我找不到正确的 XPath,也找不到与此特定问题相关的任何问题。

我试过了:

"//span[@data-highlighted='true']"

还有更多连续的 XPath 引用其先前的节点,但实际上无法获得有效的 Xpath。对我来说困难在于它没有 id 或标题,所以我试图通过它的“数据突出显示”来获取它,但这似乎不起作用。

为了完整起见: 我编写了以下 Java 方法,旨在获取 Xpath 作为其输入:

public Boolean webelementIsPresent (String inputXpath) throws InterruptedException {
return driver.findElements(By.xpath(inputXpath)).size()>0;
}

然后在一个测试类中,无论 web 元素是否存在(该方法返回 True)或不存在,我都会执行 assertTrue。

我愿意提供任何帮助,在此先感谢! :)

【问题讨论】:

  • 为什么不搜索包含该文本的 span
  • 我自己刚刚尝试过“//span[@data-highlighted='true']”,chrome devtools 找到了没有任何问题的元素。您的 XPath 应该是正确的。你能找到其他没有问题的元素吗?
  • 请阅读为什么a screenshot of code is a bad idea。粘贴代码并正确格式化。

标签: java html selenium xpath selenium-webdriver


【解决方案1】:

你可以通过文本获取元素

driver.findElement(By.xpath("//span[contains(text(), 'Willkommen')]"));

或找到div 和id 并在此基础上找到span 元素。有两种选择:

driver.findElement(By.xpath("//div[@id='description']//span"));

或

WebElement descriptionDiv = driver.findElement(By.id("description"));
descriptionDiv.findElement(By.tagName("span"));

或

driver.findElement(By.cssSelector("#description span"));

【讨论】:

  • 您的最后一个代码块最好作为单个 CSS 选择器 #description span,因为它只需要点击页面一次而不是链接 .findElements。
  • @JeffC 我完全同意。但是,我的意思是向 OP 提出不同的查找 Web 元素的方法 :) 我会将您的建议作为附加选项添加到我的答案中。谢谢!
【解决方案2】:

您的 XPath 看起来不错,我猜这是时间问题,您需要稍等片刻。也可能是当您捕获 HTML 时该页面处于某种状态,而当您到达该页面时它并不总是处于该状态。

还有其他定位器应该在这里工作。

XPath

//span[contains(., 'Willkommen')]

CSS 选择器(根据您当前的 XPath 结果,这些选择器可能有效,也可能无效)

span[data-highlighted='true']
#description span[data-highlighted='true']

对于您的功能,我建议进行更改。将String 参数替换为By 以获得更大的灵活性。然后,您可以使用任何方法定位元素,而不仅限于 XPath。

public Boolean webElementIsPresent(By locator)
{
    return driver.findElements(locator).size() > 0;
}

或者如果你想添加一个等待,

public Boolean webElementIsPresent(By locator)
{
    try
    {
        new WebDriverWait(driver, 5).until(ExpectedConditions.presenceOfElementLocated(locator));
        return true;
    }
    catch (TimeoutException e)
    {
        return false;
    }
}

【讨论】:

    【解决方案3】:

    要识别元素"//span[@data-highlighted='true']",您可以使用以下xpath:

    "//table[@class='GJBYOXIDAQ']/tbody//tr/td/div[@class='GJBYOXIDPL' and @id='descriptionZoom']/table/tbody/tr/td/div[@class='GJBYOXIDIN zoomable highlight' and @id='description']/div[@class='gwt-HTML' and @id='description']//span[@data-highlighted='true']"
    

    【讨论】:

      猜你喜欢
      • 2015-01-03
      • 2017-08-17
      • 2021-01-29
      • 2017-09-27
      • 1970-01-01
      • 2022-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多