Selenium XPath не распознает текст в ячейке таблицы

1

Я пытаюсь выполнить часть тестирования с помощью selenium2, используя следующий код:

private const string TicketName = "Automated Test Ticket";

[Test]
public void EditTicketTest() {

    var tableData = driver.FindElement(By.XPath("//td[contains(text(), '" + TicketName + "')]"));

}

Тест не выполняется по следующей причине:

OpenQA.Selenium.NoSuchElementException: не удается найти элемент: {"method": "xpath", "selector": "//td [contains (text(), 'Automaticated Tick Ticket')]"}

Но когда я смотрю на страницу и проверяю элемент, текст определенно находится внутри тега. Возможно ли, что есть некоторый избыточный интервал или что-то еще, что может заставить его не распознавать текст?

Вот HTML:

<tr data-id="55">
    <td>55</td>
    <td class="ticket-title">
    <span data-original-title="Automated Test Ticket" class="work-on-ticket-note-icon-tickets" data-toggle="tooltip" data-placement="right" data-trigger="hover" title=""></span>                          <span data-original-title="This is a work on ticket note for a company!" class="work-on-ticket-note-icon-companies" data-toggle="tooltip" data-placement="right" data-trigger="hover" title=""></span>                         Automated Test Ticket
    </td>
    <td>Medium</td>
    <td>Active</td>
    <td>8/25/2014<br> <small>(0 changes)</small></td>
    <td><a href="#" class="modal-open" data-modal="company-details-modal" data-url="/companies/details/1"></a></td>
    <td>
            <strong class="text-danger">None Assigned</strong>

    </td>
    <td>
        <a href="#" class="modal-open btn btn-sm btn-success" data-modal="edit-modal" data-url="/{controller}/edit/55"><span class="glyphicon glyphicon-edit"></span></a>
        <a href="#" class="modal-open btn btn-sm btn-info" data-modal="log-modal" data-url="/{controller}/log/55"><span class="glyphicon glyphicon-list-alt"></span></a>
        <a href="#" class="modal-open btn btn-sm btn-warning" data-modal="addtime-modal" data-url="/{controller}/addtime/55"><span class="glyphicon glyphicon-time"></span></a>
    </td>
</tr>
  • 1
    NoSuchElementException обычно NoSuchElementException из-за того, что 1. элемент, который вы пытаетесь найти, находится в <frame> или <iframe> , или 2. элемент, который вы пытаетесь найти, еще не отображается на странице, когда предпринята попытка.
Теги:
unit-testing
xpath
selenium
automated-tests

1 ответ

2
Лучший ответ

В рассматриваемом td содержится несколько пустых текстовых узлов в качестве дочерних элементов, а когда text() используется в функции, которая принимает строку, она будет оценивать строковое значение первого совпадающего узла в порядке документа, так что это:

//td[contains(text(), 'Automated Test Ticket')]

Оценивает что-то вроде этого:

//td[contains("            ", 'Automated Test Ticket')]

Который всегда будет производить пустой набор узлов.

Вот два варианта:

//td[contains(., 'Automated Test Ticket')]

который будет соответствовать любому td который имеет непрерывный "Автоматический тестовый билет" в любом месте внутри него, или это:

//td[text()[contains(., 'Automated Test Ticket')]]

который будет соответствовать любому td который имеет непосредственный дочерний текстовый узел, содержащий текст "Автоматический тестовый билет".

Я предпочитаю первый вариант, потому что он чище и имеет больше шансов на совпадение, если вы не совсем уверены в том, что будет содержать td.

  • 0
    Это сработало, спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню