Во-первых, в соответствии с отступом вашего примера кода, создается впечатление, что вы делаете вложенные для циклов - внешний для изменения страниц и внутренний, который будет получать текст в каждой строке.Дело в том, что 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
-на работающем) вместо тихого прохождения с неожиданным поведением.