C# Selenium XPath无法识别表单元格中的文本

C# Selenium XPath无法识别表单元格中的文本,c#,unit-testing,selenium,xpath,automated-tests,C#,Unit Testing,Selenium,Xpath,Automated Tests,我尝试使用以下代码对selenium2进行单元测试: private const string TicketName = "Automated Test Ticket"; [Test] public void EditTicketTest() { var tableData = driver.FindElement(By.XPath("//td[contains(text(), '" + TicketName + "')]")); } 测试失败的原因如下: OpenQA.Sele

我尝试使用以下代码对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:无法定位元素:{“方法”:“xpath”,“选择器”:”//td[contains(text(),“自动测试票证”)]“}

但是当我查看页面并检查元素时,文本肯定在标记内。是否有可能是因为间距过大或其他原因导致其无法识别文本

以下是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>

55
自动测试票
中等
活跃的
2014年8月25日(0次变更)
未分配

问题中的
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
将包含什么内容,则有更好的机会找到匹配项。

NoTouchElementException
通常是因为1。您试图查找的元素位于
或2中。进行尝试时,您尝试查找的元素尚未显示在页面上。