Robot Framework: как сортировать по - PullRequest
1 голос
/ 14 марта 2019

У меня есть веб-страница с выпадающим списком для сортировки списка по цене, имени, ... Список находится на многих страницах, поэтому мне нужно сначала получить все элементы, а затем я отсортирую и проверю, правильный. Правильно?

Я пытаюсь сделать это и перейти на все страницы и получить все элементы. Но это только элементы на первой странице. Я совершенно новый в сфере роботов. У кого-нибудь есть предложения, как мне это сделать?

${name_list_actual}    Create List     
${cnt_pages}=    Get Element Count    //div[@class='container index-new-p']/div/nav[@class='text-center']/ul/li/*
Log To Console    ${cnt_pages}
:FOR    ${n}    IN RANGE    1    ${cnt_pages}
\    Click link    //div[@class='container index-new-p']/div/nav/ul/li[${n}]/a
\    ${cnt}=    Get Element Count     //*[@class="title"]/*
    :FOR    ${i}    IN RANGE    1    ${cnt}
    \    ${get_names}    Get Element Attribute    //table[@class='result-table']/tbody/tr[${i}]/td/div/div[2]/div/a    text     
    \    Append To List    ${name_list_actual}    ${get_names}
      ${get_names}=    Select All From List    //table[@class='result-table']/tbody/tr[${i}]/td/div/div[2]/div/a
\    Log To Console    ${name_list_actual}
\    Continue For Loop

Большое спасибо

1 Ответ

0 голосов
/ 15 марта 2019

Во-первых, в соответствии с отступом вашего примера кода, создается впечатление, что вы делаете вложенные для циклов - внешний для изменения страниц и внутренний, который будет получать текст в каждой строке.Дело в том, что Robot Framework не поддерживает вложенные циклы - см. Документацию .

Что произошло при выполнении, так это то, что первый цикл (разбиение на страницы) был запущен всего с двумя операторами и завершился:

\    Click link    //div[@class='container index-new-p']/div/nav/ul/li[${n}]/a
\    ${cnt}=    Get Element Count     //*[@class="title"]/*

Затем все остальные были выполнены как часть второй.

Решением было бы иметь ключевое слово «Получить все значения в таблице», которое будет содержать внутренний цикли вызовите его в текущем внешнем интерфейсе, который будет разбивать на страницы.


Другая проблема - вы используете IN RANGE, передавая 1 в качестве начала и ${cnt} в качестве конца;если оно имеет значение 4, вы, вероятно, ожидаете, что переменная отслеживания получит все значения от 1 до 4.
И все же диапазон работает с первым аргументом включительно и до, но не до, второго аргумента;таким образом, он охватывает диапазон от 1 до 3. Чтобы спасти это, вам нужно установить верхнюю границу cnt + 1, например, ${cnt + 1}.


Незначительные вещи:

У вас есть оператор, который находится внутри блока цикла, но не имеет префикса \:

${get_names}=    Select All From List    //table[@class='result-table']/tbody/tr[${i}]/td/div/div[2]/div/a

Я удивлен, что он не дал вам синтаксической ошибки - он эффективно разрывает цикл и структуруследует жаловаться, что следующие строки имеют префикс, как будто в цикле, но один не запускается.

-

Когда вы изменяете страницы с помощью щелчка, вы не убедитесь, что пользовательский интерфейс имеетзагрузил данные для новой страницы.Если это происходит с помощью вызовов ajax, вы вполне можете работать с данными предыдущей страницы, думая, что это новая страница - щелчок селена очень быстро возвращает управление, и операнды для получения текста работают - пока пользовательский интерфейс все еще ждетновые данные и отображаются предыдущие.

-

В версии RF 3.1 синтаксис цикла отличается - члены блока не имеют префикса \,и закрывается оператором END.
Я бы предложил перенести на него: а) текущий будет в конечном итоге объявлен устаревшим, и б) в новом вложенность была бы помечена как синтаксическая ошибка.(вы запускаете новый цикл без END -на работающем) вместо тихого прохождения с неожиданным поведением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...