Atata - Невозможно найти элемент, используя класс Table<>
Когда я пытаюсь сослаться на некоторый элемент в таблице, используя 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 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();
Я думаю, что о моем столе не <thead>
тег. Есть идеи?
1 ответ
Вы правы. Из коробки Table
управление работает по умолчанию с <table>
который содержит <th>
элементы внутри thead/tr
, Такая строка пропускается, когда Atata обрабатывает обычные строки / строки данных.
Вы можете проверить это TableRow
Класс содержит следующее определение элемента управления:
[ControlDefinition("tr[parent::table or parent::tbody]", ComponentTypeName = "row")]
В вашем случае первая строка с заголовками рассматривалась как обычная строка, и Атата попытался найти ссылку в этой строке, которая там отсутствует.
Но в Atata вы можете легко перенастроить такие вещи. Просто перезаписать [ControlDefinition]
из OrdersTableRow
Класс следующим образом:
[ControlDefinition("tr[td]", ComponentTypeName = "row")]
public class OrdersTableRow : TableRow<_>
{
//...
}
Сюда Orders.Rows
будет обрабатывать только <tr>
элементы, которые имеют <td>
элемент внутри, пропуская первый ряд.