ImageTag существует в TR?

РЕДАКТИРОВАТЬ:

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 и в ответах я буду ожидать, если имя имеет тег изображения или нет.

еще раз, если я пройду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 [содержит (.,' 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>
 Falkenfighter11 окт. 2012 г., 20:27
Попробуйте удалитьstring name = String.Format("//*[contains(text(), \'{0}\')]", 'TEST1'); вместо этого просто попробуйтеIWebElement element = table.FindElement(By.XPath("//*[contains(text(), 'TEST1')]")); так как это не нужно. И ваша проблема в этомIWebElement image = element.FindElement(By.XPath("//img")); это должно бытьIWebElement image = parent.FindElement(By.XPath("//img"));

Ответы на вопрос(2)

Решение Вопроса

Сначала получите ваш элемент:

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

 Nick Kahn11 окт. 2012 г., 19:24
я получаю неправильное изображение src, поэтому его извлечение изображения со страницы, и я проверил, как это:image.getattribute("src")
 Nick Kahn11 окт. 2012 г., 19:28
так что я получаю в общей сложности 126, когда я делаюparent.FindElements(By.XPath("//img"))
 Falkenfighter11 окт. 2012 г., 19:40
Я только что попробовал//td[contains(text(), 'TEST1')]/../td/img что вы делаете, и я нахожу только 1 элемент. Мне нужно увидеть метод, который вы настроили.
 Arran11 окт. 2012 г., 18:35
+1 сделал это, так как на самом деле это лучший способ сделать это. Единственное, что я хотел бы сказать, это быть конкретным в XPath, не используйте*, но использоватьtd.
 Falkenfighter11 окт. 2012 г., 19:29
у вас есть более 1 строки 'TEST1' на вашей странице? И могу ли я увидеть код, который вы используете?

он отлично работает, выполняется как в Firefox, так и в инструментах разработчика Chrome, и возвращает img. Это действительно что-то возвращает или просто не возвращает то, что вы ожидаете? Ошибка, говоря, что элемент не может быть найден?

Это еще один способ получить это:

//td[normalize-space(text())='TEST1']/../descendant::img/@src
 Arran11 окт. 2012 г., 17:26
Это в iFrame? Какой браузер?
 Nick Kahn11 окт. 2012 г., 17:27
я использую браузер IE
 Arran11 окт. 2012 г., 17:38
Что произойдет, если вы попробуете это в Chrome?
 Nick Kahn11 окт. 2012 г., 17:23
получить ошибку,element can not be found
 Nick Kahn11 окт. 2012 г., 17:28
The xpath expression '//td[normalize-space(text())='TEST1']/../descendant::img/@src' cannot be evaluated or does notresult in a WebElement

Ваш ответ на вопрос