2014-10-08 3 views
0

Я автоматизировал приложение (используя Protractor), и я столкнулся с ситуацией, когда я хотел выбрать опцию из следующего типа, используя кнопку со стрелкой ВНИЗ от клавиатуры. Вот как я приближаюсь к этому действию.Завершение каждого() блока в Protractor

  1. После ввода части в текстовое поле я получаю ссылку на каждую опцию, которая отображается в следующем виде.
  2. Теперь, я использую метод транспортировщика .each() для повторения каждой опции для поиска нужной опции.
  3. Я создаю скрипт, чтобы нажать кнопку со стрелкой ВНИЗ, чтобы перебирать каждую опцию в следующем формате. Предположим, что 10 опций отображаются в следующем типе, а параметр, который мне нужно выбрать, находится на 5-й позиции. Теперь, когда я добираюсь до пятой позиции, я выбираю опцию, но каждая() функция все еще продолжается.

Я хочу, чтобы цикл завершался, когда была выбрана требуемая опция. Что-то вроде инструкции BREAK в циклах FOR.

BTW Я пробовал описанный выше сценарий с циклом FOR, но не смог использовать оператор BREAK в обработчике then().

Пожалуйста, дайте мне знать, как справиться с этой ситуацией.

ответ

0

Вы можете создать исключение для завершения цикла. Поместите петлю внутри try и используйте catch, чтобы пререкаться с вашими результатами. Вы также можете просто использовать логическую переменную, чтобы указать, что вы нашли совпадение и игнорируете все после этой точки. Я бы просто использовал цикл for.

Edit: Вы можете добавить переменную провести акцию перед allBenchmarks.each

var action 

Тогда внутри теста

if(dataValue == optionToSelect){ 
    action = function() {benchmark.click(); ...} 
} 

После выхода петли называют действием

if (action) action() 
+0

Проблема в том, что я не могу получить доступ к значениям переменных, установленным внутри **, а затем ** обработчикам идеал блока. Кроме того, после выбора выбора из типа вперед он исчезает и по мере того, как цикл продолжается, он не может найти следующую ссылку на элемент и выдает сообщение об ошибке «Элемент, который не найден с таким и так XPATH ...». –

+0

вам нужно объявить переменную вне (и до) блока, если вы хотите, чтобы она была установлена ​​внутри блока и использовалась после. Можете ли вы опубликовать какой-то код, который не работает, но показывает, что вы пытаетесь сделать? –

+0

вот фрагмент кода. allBenchmarks.each (function (benchmark) { benchmark.getAttribute ("class"). then (function (classValue) { if (классValue.indexOf ("active")> 0) { benchmark.getAttribute ("data-value «) .then (функция (DataValue) { если (DataValue == optionToSelect) { benchmark.click(); defer.fulfill (истина); возвращение обещание, } });} }); }); –