C# Selenium XPath查找的元素比DOM中实际的元素多
我尝试循环DOM中的每个表行元素,并执行字符串断言,以查看它是否包含所需的文本。当我调试代码并查看变量tableRows的计数时,它显示它包含158个项目,而实际页面上的项目几乎没有那么多。我做错了什么 C#:C# Selenium XPath查找的元素比DOM中实际的元素多,c#,html,unit-testing,selenium,xpath,C#,Html,Unit Testing,Selenium,Xpath,我尝试循环DOM中的每个表行元素,并执行字符串断言,以查看它是否包含所需的文本。当我调试代码并查看变量tableRows的计数时,它显示它包含158个项目,而实际页面上的项目几乎没有那么多。我做错了什么 C#: [测试] 公共无效筛选器ByCompanyTest() { 常量字符串过滤器=“公司”; var table=this.Driver.FindElement(By.ClassName(“索引表”); var tableRows=table.FindElements(By.XPath(“/
[测试]
公共无效筛选器ByCompanyTest()
{
常量字符串过滤器=“公司”;
var table=this.Driver.FindElement(By.ClassName(“索引表”);
var tableRows=table.FindElements(By.XPath(“//tr”);
对于(var i=1;i
HTML:
#
标题
2.
标题
中等
活跃的
2014年7月19日(3次变更)
比尔·比林顿
9
把这东西修好!
中等
活跃的
2014年7月23日(1次变更)
比尔·比林顿
由比尔·比林顿登记
10
试验
中等
活跃的
2014年7月22日(0次变更)
比尔·比林顿
XPath需要更多的帮助来告诉它上下文(即在元素中搜索):
请注意。这将把查询过滤到该表中的tr
元素
需要注意的另一点是,这可以在没有XPath的情况下完成:
var tableRows=table.FindElements(按.TagName(“tr”))
我也将提到,在性能方面,您可能会发现通过XPath特别是针对XPath(即“强> >不/强”,围绕整个批次进行循环)将更快、更高性能。在XPath表达式的中间,
<代码> //< /代码>意味着在之前出现的代码“>//”的子孙之间搜索。代码>/在XPath表达式的开头表示在根节点的后代之间搜索;i、 e.搜索整个文档。这就是为什么需要以/
开始XPath<代码>表示当前上下文节点。
[Test]
public void FilterByCompanyTest()
{
const string filter = "Company";
var table = this.Driver.FindElement(By.ClassName("index-table"));
var tableRows = table.FindElements(By.XPath("//tr"));
for (var i = 1; i < tableRows.Count; i++) {
StringAssert.Contains(filter, this.Driver.FindElement(By.XPath("//tr[" + i + "]/td[6]")).Text);
}
}
<div class="table-responsive index-table">
<table class="table">
<thead>
<tr>
<th>#</th>
<th class="ticket-title">Title</th>
<th>
<a href="?companyID=-1&technicianID=-1&statusID=0&typeID=&orderBy=priorityAsc">
Priority
<span class="unordered"></span>
</a>
</th>
<th>
<a href="?companyID=-1&technicianID=-1&statusID=0&typeID=&orderBy=statusAsc">
Status
<span class="unordered"></span>
</a>
</th>
<th>
<a href="?companyID=-1&technicianID=-1&statusID=0&typeID=&orderBy=dueDateAsc">
Due Date
<span class="unordered"></span>
</a>
</th>
<th>
<a href="?companyID=-1&technicianID=-1&statusID=0&typeID=&orderBy=companyAsc">
Company
<span class="unordered"></span>
</a>
</th>
<th>
<a href="?companyID=-1&technicianID=-1&statusID=0&typeID=&orderBy=technicianAsc">
Technician
<span class="unordered"></span>
</a>
</th>
<th></th>
</tr>
</thead>
<tbody>
<tr data-id="2">
<td>2</td>
<td class="ticket-title">
Title
</td>
<td>Medium</td>
<td>Active</td>
<td>7/19/2014<br /> <small>(3 changes)</small></td>
<td><a href="#" class="modal-open" data-modal="company-details-modal" data-url="/companies/details/1612">Company</a></td>
<td>
Bill Billington
<span class="glyphicon glyphicon-check"></span>
</td>
<td>
<a href="#" class="modal-open btn btn-sm btn-success" data-modal="edit-modal" data-url="/{controller}/edit/2"><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/2"><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/2"><span class="glyphicon glyphicon-time"></span></a>
</td>
</tr>
<tr data-id="9">
<td>9</td>
<td class="ticket-title">
<span class="work-on-ticket-note-icon-tickets" data-toggle="tooltip" data-placement="right" data-trigger="hover" title="test"></span> Fix this thing!
</td>
<td>Medium</td>
<td>Active</td>
<td>7/23/2014<br /> <small>(1 change)</small></td>
<td><a href="#" class="modal-open" data-modal="company-details-modal" data-url="/companies/details/1604">Company</a></td>
<td>
Bill Billington
<span class="glyphicon glyphicon-check"></span>
<br /><small>Checked In By Bill Billington</small>
</td>
<td>
<a href="#" class="modal-open btn btn-sm btn-success" data-modal="edit-modal" data-url="/{controller}/edit/9"><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/9"><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/9"><span class="glyphicon glyphicon-time"></span></a>
</td>
</tr>
<tr data-id="10">
<td>10</td>
<td class="ticket-title">
<span class="work-on-ticket-note-icon-companies" data-toggle="tooltip" data-placement="right" data-trigger="hover" title="This is a work on ticket note for a company!"></span> Test
</td>
<td>Medium</td>
<td>Active</td>
<td>7/22/2014<br /> <small>(0 changes)</small></td>
<td><a href="#" class="modal-open" data-modal="company-details-modal" data-url="/companies/details/1">Company (Provider)</a></td>
<td>
Bill Billington
</td>
<td>
<a href="#" class="modal-open btn btn-sm btn-success" data-modal="edit-modal" data-url="/{controller}/edit/10"><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/10"><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/10"><span class="glyphicon glyphicon-time"></span></a>
</td>
</tr>
</tbody>
</table>
</div>
var tableRows = table.FindElements(By.XPath(".//tr"));