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> элемент внутри, пропуская первый ряд.

Другие вопросы по тегам