【问题标题】:Selenium XPath not recognizing text in table cellSelenium XPath 无法识别表格单元格中的文本
【发布时间】:2014-10-19 00:21:21
【问题描述】:

我正在尝试使用以下代码对 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(), 'Automated Test 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>

【问题讨论】:

  • NoSuchElementException 通常是因为 1. 您要定位的元素在 &lt;frame&gt;&lt;iframe&gt; 中,或者 2. 您要定位的元素尚未显示尝试时在页面上。

标签: c# unit-testing selenium xpath automated-tests


【解决方案1】:

有问题的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,其中包含文本“Automated Test Ticket”。

我更喜欢第一个选项,因为它更简洁,如果您不完全确定 td 将包含什么内容,它更有可能找到匹配项。

【讨论】:

    猜你喜欢
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    相关资源
    最近更新 更多