2

编辑:

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并且TEST4确实有Image tag因此它应该返回我真实。

我尝试了这样的事情但没有奏效:

string name = String.Format(".//td[contains(., \'{0}\')]/..//@src", "TEST1");
IWebElement element = driver.FindElement(By.XPath(name));

得到这个错误:在尝试了上面的代码之后......

xpath 表达式 './/td[contains(., 'TEST1')]/..//@src' 无法计算或不会产生 WebElement

下面是html源代码

<div id="DIV_ID_1">
    <table id="TBLID1">
        <tr>
            <td>
                TEST1
            </td>
            <td>
                <img id="ctl00" src="../App_Themes/Default/images/phone.gif" />
            </td>
        </tr>
        <tr>
            <td>
                TEST2
            </td>
        </tr>
        <tr>
            <td>
                TEST3
            </td>
        </tr>
        <tr>
            <td>
                TEST4
            </td>
            <td>
                <img id="ctl02" src="../App_Themes/Default/images/phone.gif" />
            </td>
        </tr>
    </table>
</div>
4

2 回答 2

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

于 2012-10-11T16:01:36.283 回答
0

使用您原来的 XPath,它工作正常,在 Firefox 和 Chrome 的开发人员工具中执行,并返回 img。它实际上是返回任何东西还是只是没有返回您所期望的?说找不到元素会出错吗?

这是另一种获取方式:

//td[normalize-space(text())='TEST1']/../descendant::img/@src
于 2012-10-11T15:17:21.090 回答