我有以下HTML代码:
我需要引用span元素(树中的最后一个元素)以检查它是否存在。 问题是,我找不到合适的XPath,并且无法找到任何有关此特定问题的问题。
我试过了:
"//span[@data-highlighted='true']"
以及进一步的连续XPath引用其先前的节点但无法实际获得有效的Xpath。对我来说困难在于它没有身份证或头衔所以我试图通过它的数据突出显示"但这似乎不起作用。
仅为了完整性: 我编写了以下Java方法,该方法用于获取Xpath作为输入:
public Boolean webelementIsPresent (String inputXpath) throws InterruptedException {
return driver.findElements(By.xpath(inputXpath)).size()>0;
}
然后在测试类中,我执行一个assertTrue,其中存在webelement(该方法返回True)或者它没有。
我愿意提供任何帮助,提前谢谢! :)
答案 0 :(得分:1)
您可以逐个文本地获取
driver.findElement(By.xpath("//span[contains(text(), 'Willkommen')]"));
或者使用div
查找id
并根据该值找到span元素。有两种选择:
driver.findElement(By.xpath("//div[@id='description']//span"));
OR
WebElement descriptionDiv = driver.findElement(By.id("description"));
descriptionDiv.findElement(By.tagName("span"));
OR
driver.findElement(By.cssSelector("#description span"));
答案 1 :(得分:0)
要识别元素"//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']"
答案 2 :(得分:-1)
你的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;
}
}