编辑:
public bool getImage()
{
IWebElement table = driver.FindElement(By.Id("DIV_ID_1"));
string name = String.Format("//*[contains(text(), \'{0}\')]", 'TEST1');
IWebElement element = table.FindElement(By.XPath(name));
IWebElement parent = element.FindElement(By.XPath(".."));
try
{
IWebElement image = element.FindElement(By.XPath("//img"));
}
catch (NoSuchElementException e)
{
return false;
}
return true;
}
我如何知道TEST1
是否有Image
?在下面的html源代码中,我有tr和tr我有td和一些tr可能有图像标签,有些可能没有
所以,我将传递名称作为一个例子:TEST1
并且在返回时我将期待该名称是否具有Image标记。
再次,如果我通过TEST2
和TEST3
它应该return
null
,因为它没有图片标记,而TEST1
和{{ 1}}确实有TEST4
因此它应该让我回归真实。
我尝试过这样的事情,但没有奏效:
Image tag
得到此错误:尝试上述代码后......
xpath表达式'.// td [contains(。,'TEST1')] /..//@ src' 无法评估或不在WebElement
中进行评估
以下是html源代码
string name = String.Format(".//td[contains(., \'{0}\')]/..//@src", "TEST1");
IWebElement element = driver.FindElement(By.XPath(name));
答案 0 :(得分:5)
所以我会把它分解为几步。
首先得到你的元素:
WebElement element = driver.findElement(By.xpath("//*[contains(text(), 'TEST1')]"));
然后获取父元素:
WebElement parent = element.findElement(By.xpath(".."));
然后检查父元素是否为<img>
标记:
Try
{
WebElement image = parent.findElement(By.xpath("//img"));
}
catch (NoSuchElementException e)
{
System.out.println("Did not find an image");
}
我将它包装在一个函数中,然后我可以在文本中传递以查找图像并返回元素(如果存在)。
类似的东西:
public WebElement getImage(String innerText)
然后只传入TEST1或TEST2
答案 1 :(得分:0)
使用您的原始XPath,它可以正常工作,在Firefox和Chrome的开发人员工具中执行,它返回img。它真的会返回任何东西,或者只是没有返回你期望的东西吗?说找不到元素是错误的吗?
这是获得它的另一种方式:
//td[normalize-space(text())='TEST1']/../descendant::img/@src