Перейти к содержимому

Фотография

Protractor. Click if exists


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 18

#1 lapa

lapa

    Новый участник

  • Members
  • Pip
  • 55 сообщений


Отправлено 22 февраля 2019 - 07:51

Подскажите как вообще проверить что элемент видим. То есть я хочу кликнуть на один елемент если он видим, а если нет то на другой. selenium control flow: false. То есть без промизов.


  • 0

#2 BadMF

BadMF

    Специалист

  • Members
  • PipPipPipPipPip
  • 809 сообщений
  • ФИО:Dmitry Petrov

Отправлено 22 февраля 2019 - 14:05

Подскажите как вообще проверить что элемент видим. То есть я хочу кликнуть на один елемент если он видим, а если нет то на другой. selenium control flow: false. То есть без промизов.

в силениуме нет условий, и это правильно, так как при наличии условий, тест превращается в сценарий.


  • 0

#3 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 22 февраля 2019 - 14:16

Банально же кликаете по первому элементу и ловите эксцепшен. Поймали NoElementException или как он там называется - клацайте по второму.
  • 1

#4 BadMF

BadMF

    Специалист

  • Members
  • PipPipPipPipPip
  • 809 сообщений
  • ФИО:Dmitry Petrov

Отправлено 22 февраля 2019 - 18:09

ну зачем плохому то учите =)


  • 0

#5 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 22 февраля 2019 - 18:26

ну зачем плохому то учите =)

Это не плохое. Это ограниченно применимое решение череватое некоторыми граблями.
Ну и нельзя человека научить тому чему он не хочет учится, а так глядишь, try catch освоит.
  • 1

#6 lapa

lapa

    Новый участник

  • Members
  • Pip
  • 55 сообщений


Отправлено 25 февраля 2019 - 11:33

Банально же кликаете по первому элементу и ловите эксцепшен. Поймали NoElementException или как он там называется - клацайте по второму.

другого способа нет?


  • 0

#7 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 25 февраля 2019 - 12:15

Банально же кликаете по первому элементу и ловите эксцепшен. Поймали NoElementException или как он там называется - клацайте по второму.

другого способа нет?

Чем вам этот путь плох?
Можно еще подождать первый элемент и если не дождались кликать на второй, но ЕМНИП там тоже эксцепшен ловить надо.
  • 0

#8 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 25 февраля 2019 - 13:35

Альтернативный вариант:

if (driver.findElements(<локатор первого элемента>).size() > 0) {

     <какие-нибудь ожидания, если нужно>

     driver.findElement(<локатор первого элемента>).click();

} else driver.findElement(<локатор второго элемента>).click();

 

п.с.: findElements эксепшенов не кидает, если ничего не нашел, просто возвращает пустой List, поэтому try/catch тут не требуется.


  • 1

#9 lapa

lapa

    Новый участник

  • Members
  • Pip
  • 55 сообщений


Отправлено 25 февраля 2019 - 14:03

Альтернативный вариант:

if (driver.findElements(<локатор первого элемента>).size() > 0) {

     <какие-нибудь ожидания, если нужно>

     driver.findElement(<локатор первого элемента>).click();

} else driver.findElement(<локатор второго элемента>).click();

 

п.с.: findElements эксепшенов не кидает, если ничего не нашел, просто возвращает пустой List, поэтому try/catch тут не требуется.

protractor не java, там typescript


  • 0

#10 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 25 февраля 2019 - 14:19

Альтернативный вариант:
if (driver.findElements(<локатор первого элемента>).size() > 0) {
     <какие-нибудь ожидания, если нужно>
     driver.findElement(<локатор первого элемента>).click();
} else driver.findElement(<локатор второго элемента>).click();
 
п.с.: findElements эксепшенов не кидает, если ничего не нашел, просто возвращает пустой List, поэтому try/catch тут не требуется.

protractor не java, там typescript

А благородному дону не все ли равно из какого языка программирования вызывать Selenium? (Вариант ответа пятый, первый цензурный)
  • 0

#11 lapa

lapa

    Новый участник

  • Members
  • Pip
  • 55 сообщений


Отправлено 26 февраля 2019 - 06:34

 

 

Альтернативный вариант:
if (driver.findElements(<локатор первого элемента>).size() > 0) {
     <какие-нибудь ожидания, если нужно>
     driver.findElement(<локатор первого элемента>).click();
} else driver.findElement(<локатор второго элемента>).click();
 
п.с.: findElements эксепшенов не кидает, если ничего не нашел, просто возвращает пустой List, поэтому try/catch тут не требуется.

protractor не java, там typescript

 

А благородному дону не все ли равно из какого языка программирования вызывать Selenium? (Вариант ответа пятый, первый цензурный)

 

в том то ии дело что не всё равно. погуглите про промисы в протракторе


  • 0

#12 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 26 февраля 2019 - 07:30

А если так?
 
var someButton =  element(by.css(<локатор>));
someButton.isPresent().then(function(result) {
    if ( result ) {
        someButton.click();
    } else {
        element(by.css(<локатор другой кнопки>)).click();
    }
    });
 
п.с.: я протрактор не знаю, промисы погуглила, код выше - по сути из того же гугла.

  • 0

#13 lapa

lapa

    Новый участник

  • Members
  • Pip
  • 55 сообщений


Отправлено 26 февраля 2019 - 08:49

 

А если так?
 
var someButton =  element(by.css(<локатор>));
someButton.isPresent().then(function(result) {
    if ( result ) {
        someButton.click();
    } else {
        element(by.css(<локатор другой кнопки>)).click();
    }
    });
 
п.с.: я протрактор не знаю, промисы погуглила, код выше - по сути из того же гугла.

 

а так устаревший подход :((( депрекейтед способ :(((


  • 0

#14 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 26 февраля 2019 - 09:05

А так? (вариация на тему первого моего варианта)

 

element.all(by.css(<локатор первой кнопки>))).count().then(function(count) {
   if (count > 0) {

      element(by.css(<локатор>)).click();

   } else element(by.css(<локатор второй кнопки>)).click();

});

 

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


  • 0

#15 BadMF

BadMF

    Специалист

  • Members
  • PipPipPipPipPip
  • 809 сообщений
  • ФИО:Dmitry Petrov

Отправлено 26 февраля 2019 - 12:00

protractor.promise.all([
         element(by.cssContainingText('.grid-cols-3', 'Client')).isPresent(),
         element(by.cssContainingText('.grid-cols-3', 'Awaiting')).isPresent(),
    ]).then(function (arr) {
      if (arr.indexOf(true) >= 0) {
             element(by.css('#FinApplication')).click();
        }
    });

ожидаем сразу все промисы, а потом смотрим, если какой-то true, то кликаем

 

5 минут гугления. ну и что что промисы всегда не пустой список, пользуйтесь списком

с точки зрения архитектуры теста, это конечно не айс. ветвлений быть не должно.


  • 0

#16 lapa

lapa

    Новый участник

  • Members
  • Pip
  • 55 сообщений


Отправлено 27 февраля 2019 - 13:11

protractor.promise.all([
         element(by.cssContainingText('.grid-cols-3', 'Client')).isPresent(),
         element(by.cssContainingText('.grid-cols-3', 'Awaiting')).isPresent(),
    ]).then(function (arr) {
      if (arr.indexOf(true) >= 0) {
             element(by.css('#FinApplication')).click();
        }
    });

ожидаем сразу все промисы, а потом смотрим, если какой-то true, то кликаем

 

5 минут гугления. ну и что что промисы всегда не пустой список, пользуйтесь списком

с точки зрения архитектуры теста, это конечно не айс. ветвлений быть не должно.

 

не читаем но отвечаем, причём с упрёками. ничего нового под луной


  • 0

#17 BadMF

BadMF

    Специалист

  • Members
  • PipPipPipPipPip
  • 809 сообщений
  • ФИО:Dmitry Petrov

Отправлено 27 февраля 2019 - 14:21

 

protractor.promise.all([
         element(by.cssContainingText('.grid-cols-3', 'Client')).isPresent(),
         element(by.cssContainingText('.grid-cols-3', 'Awaiting')).isPresent(),
    ]).then(function (arr) {
      if (arr.indexOf(true) >= 0) {
             element(by.css('#FinApplication')).click();
        }
    });

ожидаем сразу все промисы, а потом смотрим, если какой-то true, то кликаем

 

5 минут гугления. ну и что что промисы всегда не пустой список, пользуйтесь списком

с точки зрения архитектуры теста, это конечно не айс. ветвлений быть не должно.

 

не читаем но отвечаем, причём с упрёками. ничего нового под луной

 

а где я не так написал? ну правда?


  • 0

#18 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 27 февраля 2019 - 14:23

 

 

не читаем но отвечаем, причём с упрёками. ничего нового под луной

автор - вы сразу не объяснили что пишете не тест, а просто автоматизируете веб-приложение для своих целей

 

много кто этого не понял, и указывают естественно что "тест неправильно написан", но у вас же это конечно не тест


  • 0

#19 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 28 февраля 2019 - 05:46

Тот кусочек кода делает не совсем то, что озвучил автор темы.

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

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


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных