Atata - 无法定位元素,使用 Table<> class
Atata - Unable to locate element, using Table<> class
当我尝试使用 Table<>
class 引用 table 中的某些元素时,出现此错误:
Message: OpenQA.Selenium.NoSuchElementException : Unable to locate element: By.XPath: .//td[1]/descendant-or-self::a
Context element:
Tag: tr
Location: {X=62,Y=273}
Size: {Width=1140, Height=37}
Text: Order Date User Address Origin Address Destination My Reference POD Status
一个table来源:
<table class="table table-striped">
<tr class="text-nowrap">
<th>Order</th>
<th>Date</th>
<th>Customer</th>
<th>User</th>
<th>Address Origin</th>
<th>Address Destination</th>
<th>My Reference</th>
<th>POD</th>
<th>Status</th>
</tr>
<tr>
<td class="text-nowrap">
<a href="/Customer/Request/Show/180305-NQHHGU">180305-NQHHGU</a>
</td>
<td>05.03.2018</td>
<td>Merchant Advance (2M7)</td>
<td>Barry Manilow</td>
<td>757 RUE GUY MONTREAL</td>
<td>242 LAVERENDRYE AVE CHURCHILL</td>
<td></td>
<td>
</td>
<td class="text-nowrap">…</td>
</tr>
页面对象来源:
public class OrdersPage : BasePage<_>
{
public Table<OrdersTableRow, _> Orders { get; private set; }
public class OrdersTableRow : TableRow<_>
{
[FindByColumnHeader("Order")]
public LinkDelegate<ShipmentOrderPage, _> Order { get; private set; }
public Date<_> Date { get; private set; }
public Text<_> Customer { get; private set; }
public Text<_> User { get; private set; }
…
…
}
}
我正在尝试在测试中做类似的事情:
Go.To<OrdersPage>().
Orders.Rows[x => x.Order.Content().Value == order.OrderNumber].Order();
我想这与我的 table 没有 <thead>
标签有关。有什么想法吗?
你是对的。开箱即用的 Table
控件默认与 <table>
一起工作,其中包含 thead/tr
内的 <th>
个元素。当 Atata 处理 regular/data 行时,将跳过此类行。
您可以检查 TableRow
class 是否包含以下控件定义:
[ControlDefinition("tr[parent::table or parent::tbody]", ComponentTypeName = "row")]
在你的例子中,带有 headers 的第一行被认为是一个常规行,Atata 试图在这一行中找到一个 link,但那里没有。
但在 Atata 中,您可以轻松地重新配置这些东西。只需覆盖 OrdersTableRow
class 的 [ControlDefinition]
如下:
[ControlDefinition("tr[td]", ComponentTypeName = "row")]
public class OrdersTableRow : TableRow<_>
{
//...
}
这样 Orders.Rows
将只处理 <tr>
个内部有 <td>
个元素的元素,跳过第一行。
当我尝试使用 Table<>
class 引用 table 中的某些元素时,出现此错误:
Message: OpenQA.Selenium.NoSuchElementException : Unable to locate element: By.XPath: .//td[1]/descendant-or-self::a
Context element:
Tag: tr
Location: {X=62,Y=273}
Size: {Width=1140, Height=37}
Text: Order Date User Address Origin Address Destination My Reference POD Status
一个table来源:
<table class="table table-striped">
<tr class="text-nowrap">
<th>Order</th>
<th>Date</th>
<th>Customer</th>
<th>User</th>
<th>Address Origin</th>
<th>Address Destination</th>
<th>My Reference</th>
<th>POD</th>
<th>Status</th>
</tr>
<tr>
<td class="text-nowrap">
<a href="/Customer/Request/Show/180305-NQHHGU">180305-NQHHGU</a>
</td>
<td>05.03.2018</td>
<td>Merchant Advance (2M7)</td>
<td>Barry Manilow</td>
<td>757 RUE GUY MONTREAL</td>
<td>242 LAVERENDRYE AVE CHURCHILL</td>
<td></td>
<td>
</td>
<td class="text-nowrap">…</td>
</tr>
页面对象来源:
public class OrdersPage : BasePage<_>
{
public Table<OrdersTableRow, _> Orders { get; private set; }
public class OrdersTableRow : TableRow<_>
{
[FindByColumnHeader("Order")]
public LinkDelegate<ShipmentOrderPage, _> Order { get; private set; }
public Date<_> Date { get; private set; }
public Text<_> Customer { get; private set; }
public Text<_> User { get; private set; }
…
…
}
}
我正在尝试在测试中做类似的事情:
Go.To<OrdersPage>().
Orders.Rows[x => x.Order.Content().Value == order.OrderNumber].Order();
我想这与我的 table 没有 <thead>
标签有关。有什么想法吗?
你是对的。开箱即用的 Table
控件默认与 <table>
一起工作,其中包含 thead/tr
内的 <th>
个元素。当 Atata 处理 regular/data 行时,将跳过此类行。
您可以检查 TableRow
class 是否包含以下控件定义:
[ControlDefinition("tr[parent::table or parent::tbody]", ComponentTypeName = "row")]
在你的例子中,带有 headers 的第一行被认为是一个常规行,Atata 试图在这一行中找到一个 link,但那里没有。
但在 Atata 中,您可以轻松地重新配置这些东西。只需覆盖 OrdersTableRow
class 的 [ControlDefinition]
如下:
[ControlDefinition("tr[td]", ComponentTypeName = "row")]
public class OrdersTableRow : TableRow<_>
{
//...
}
这样 Orders.Rows
将只处理 <tr>
个内部有 <td>
个元素的元素,跳过第一行。