$(By.className ("service")) && (By.id("sidebar_service")).shouldHave (text("Music"));
Подскажите пожалуйста, как правильно написать AND ?
$(By.className ("service")) && (By.id("sidebar_service")).shouldHave (text("Music"));
Подскажите пожалуйста, как правильно написать AND ?
Гораздо проще:
$("#sidebar_service.service").shouldHave(text("Music"));
Мне нужно, проверить что текст “Music” отображается в двух местах
$(By.className ("service")).shouldHave (text("Music") && (By.id("sidebar_service")).shouldHave (text("Music"));
Мб так?
Почти.
Нужно просто написать две отдельные строки:
$(".service").shouldHave(text("Music"));
$("#sidebar_service").shouldHave(text("Music"));
Подскажите как быть если два элемента есть и в одном может сдержатся текст а во втором нет или наоборот - в общем надо проверить их оба и если есть текст хотя бы в одном то это ОК.
Через try catch
Пишете функцию
public boolean isElement(SelenideElement element) {
try{
element.shouldHave(text("Music"));
catch(ElementNotFound e){
return false;
}
return true;
}
//Затем там где проверка нужна пишите
if(isElement($(".service")) || isElement($("#sidebar_service" ))) {
System.out.println("Ok");
}
Я бы так сделал
я надеялся на что то вроде такого, вроде как exist должен возвращать true or false
element1.shouldHave(text("Music")).should(exist) || element2.shouldHave(text("Music")).should(exist)
но я так полагаю я где то ошибаюсь
Есть такой вариант:
$$(".service,#sidebar_service").filterBy(text("Music")).should(exist);
Интересно. И такой вариант возвращает true или false?
А я всю дорогу пишу обработку исключений
А зачем вам true/false?
Нет, он убеждается, что хотя бы один элемент с таким селектором и текстом существует. Если нет - тест падает.
Обработка исключений - плохая идея. Хотя бы потому, что на это тратится лишние 4 секунды, и Селенид созраняет скриншот.
Спасибо за инфу, буду разбираться)
(element1,element2).filterBy(text("Music")).should(exist);
как я понял filterBy работает с коллекцией элементов, а если есть 2 элемента (element1,element2) то мне их надо запихнуть в коллекцию, что бы эта штука завелась?
public SelenideElement element1 = $x ("XXXXXXXX");
public SelenideElement element2 = $x ("YYYYYYYY");
в примере выше, как я понял, объявляется коллекция, куда ищутся элементы по 2 локаторам, и дальше в этой коллекции ищутся элементы с нужным текстом
$$ - это и есть коллекция. Ничего запихивать никуда не нужно)
то что это $$ или $$x есть коллекция я понимаю - но в таком случае мы указываем непосредственно локаторы как здесь $$(".service,#sidebar_service")
, может быть ситуация когда допустим один локатор определен с помощью Css селектора второй с помощью Хpath. у меня ситуация следующего характера.
public class PageA {
public static class BlockA {
public SelenideElement element1 = $x ("XXXXXXX");
public SelenideElement element2 = $x ("YYYYYYY");
}
public static class BlockB {
}
}
-----------------------------------------------------
@Test
public void SomeCheck() {
//осуществляем фильтрацию
//получаем список
//переходим в один из айтемов списка
//необходимо убедится что в блоке А у элемента 1 или элемента 2 есть текст "Music"
//если хотя бы у одного есть то значит ОК
PageA.BlockA blockA = new PageA.BlockA();
(blockA.element1, blockA.element1).filterBy(text("Music")).should(exist);
}
поэтому мне и надо как то определить эти элементы (blockA.element1 и blockA.element1) в коллекцию чтобы потом осуществить .filterBy(text(“Music”)).should(exist);
Так реализуй проверку в классе BlockA и вызывай из класса SomeCheck функцию проверки. Я ничего не понимаю, зачем такие сложности?)
то может я не достаточно нормально поясняю руки не успевают за полетом мысли, я буду стараться
У меня есть 2 страницы и отдельно тесты. Страница главная содержит фильтра и список который изменяется в зависимости от фильтров. если кликнуть по айтему списка мы попадаем на отдельную страницу PageA которая разбита на условные блоки и эти блоки содержат элементы , к которым я и пытаюсь достучатся из теста чтобы проверить наличие текста.