Подскажите как вообще проверить что элемент видим. То есть я хочу кликнуть на один елемент если он видим, а если нет то на другой. selenium control flow: false. То есть без промизов.
Protractor. Click if exists
#1
Отправлено 22 февраля 2019 - 07:51
#2
Отправлено 22 февраля 2019 - 14:05
Подскажите как вообще проверить что элемент видим. То есть я хочу кликнуть на один елемент если он видим, а если нет то на другой. selenium control flow: false. То есть без промизов.
в силениуме нет условий, и это правильно, так как при наличии условий, тест превращается в сценарий.
#3
Отправлено 22 февраля 2019 - 14:16
#4
Отправлено 22 февраля 2019 - 18:09
ну зачем плохому то учите =)
#5
Отправлено 22 февраля 2019 - 18:26
Это не плохое. Это ограниченно применимое решение череватое некоторыми граблями.ну зачем плохому то учите =)
Ну и нельзя человека научить тому чему он не хочет учится, а так глядишь, try catch освоит.
#6
Отправлено 25 февраля 2019 - 11:33
Банально же кликаете по первому элементу и ловите эксцепшен. Поймали NoElementException или как он там называется - клацайте по второму.
другого способа нет?
#7
Отправлено 25 февраля 2019 - 12:15
Чем вам этот путь плох?другого способа нет?Банально же кликаете по первому элементу и ловите эксцепшен. Поймали NoElementException или как он там называется - клацайте по второму.
Можно еще подождать первый элемент и если не дождались кликать на второй, но ЕМНИП там тоже эксцепшен ловить надо.
#8
Отправлено 25 февраля 2019 - 13:35
Альтернативный вариант:
if (driver.findElements(<локатор первого элемента>).size() > 0) {
<какие-нибудь ожидания, если нужно>
driver.findElement(<локатор первого элемента>).click();
} else driver.findElement(<локатор второго элемента>).click();
п.с.: findElements эксепшенов не кидает, если ничего не нашел, просто возвращает пустой List, поэтому try/catch тут не требуется.
#9
Отправлено 25 февраля 2019 - 14:03
Альтернативный вариант:
if (driver.findElements(<локатор первого элемента>).size() > 0) {
<какие-нибудь ожидания, если нужно>
driver.findElement(<локатор первого элемента>).click();
} else driver.findElement(<локатор второго элемента>).click();
п.с.: findElements эксепшенов не кидает, если ничего не нашел, просто возвращает пустой List, поэтому try/catch тут не требуется.
protractor не java, там typescript
#10
Отправлено 25 февраля 2019 - 14:19
А благородному дону не все ли равно из какого языка программирования вызывать Selenium? (Вариант ответа пятый, первый цензурный)protractor не java, там typescriptАльтернативный вариант:
if (driver.findElements(<локатор первого элемента>).size() > 0) {
<какие-нибудь ожидания, если нужно>
driver.findElement(<локатор первого элемента>).click();
} else driver.findElement(<локатор второго элемента>).click();
п.с.: findElements эксепшенов не кидает, если ничего не нашел, просто возвращает пустой List, поэтому try/catch тут не требуется.
#11
Отправлено 26 февраля 2019 - 06:34
А благородному дону не все ли равно из какого языка программирования вызывать Selenium? (Вариант ответа пятый, первый цензурный)
protractor не java, там typescriptАльтернативный вариант:
if (driver.findElements(<локатор первого элемента>).size() > 0) {
<какие-нибудь ожидания, если нужно>
driver.findElement(<локатор первого элемента>).click();
} else driver.findElement(<локатор второго элемента>).click();
п.с.: findElements эксепшенов не кидает, если ничего не нашел, просто возвращает пустой List, поэтому try/catch тут не требуется.
в том то ии дело что не всё равно. погуглите про промисы в протракторе
#12
Отправлено 26 февраля 2019 - 07:30
#13
Отправлено 26 февраля 2019 - 08:49
А если так?var someButton = element(by.css(<локатор>));someButton.isPresent().then(function(result) {if ( result ) {someButton.click();} else {element(by.css(<локатор другой кнопки>)).click();}});п.с.: я протрактор не знаю, промисы погуглила, код выше - по сути из того же гугла.
а так устаревший подход :((( депрекейтед способ :(((
#14
Отправлено 26 февраля 2019 - 09:05
А так? (вариация на тему первого моего варианта)
element.all(by.css(<локатор первой кнопки>))).count().then(function(count) {
if (count > 0) {
element(by.css(<локатор>)).click();
} else element(by.css(<локатор второй кнопки>)).click();
});
Сорри за флуд, просто самой интересно, как же в протракторе решается эта ситуация.
#15
Отправлено 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 минут гугления. ну и что что промисы всегда не пустой список, пользуйтесь списком
с точки зрения архитектуры теста, это конечно не айс. ветвлений быть не должно.
#16
Отправлено 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 минут гугления. ну и что что промисы всегда не пустой список, пользуйтесь списком
с точки зрения архитектуры теста, это конечно не айс. ветвлений быть не должно.
не читаем но отвечаем, причём с упрёками. ничего нового под луной
#17
Отправлено 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 минут гугления. ну и что что промисы всегда не пустой список, пользуйтесь списком
с точки зрения архитектуры теста, это конечно не айс. ветвлений быть не должно.
не читаем но отвечаем, причём с упрёками. ничего нового под луной
а где я не так написал? ну правда?
#18
Отправлено 27 февраля 2019 - 14:23
не читаем но отвечаем, причём с упрёками. ничего нового под луной
автор - вы сразу не объяснили что пишете не тест, а просто автоматизируете веб-приложение для своих целей
много кто этого не понял, и указывают естественно что "тест неправильно написан", но у вас же это конечно не тест
#19
Отправлено 28 февраля 2019 - 05:46
Тот кусочек кода делает не совсем то, что озвучил автор темы.
Другой вопрос в том, что тут никто и не должен писать 100% подходящий автору код, чтобы можно было его скопировать не изменяя.
Подсказывают варианты, а адаптировать их под свою ситуацию надо уже самостоятельно.
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных