ImageTag存在于TR?

时间:2012-10-11 14:40:22

标签: selenium webdriver selenium-webdriver

编辑:

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标记。

再次,如果我通过TEST2TEST3它应该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));

2 个答案:

答案 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