t.me/atinfo_chat Telegram группа по автоматизации тестирования

Isselected() return false


(Artem) #1

Добрый день, всем.

Столкнулся с такой проблемой:
Isselected() всегда возвращает false, причем если элемент Чекбокса нажат.

Код:
List<WebElement> conris = driver.findElements(By.cssSelector("label.prettyCheckbox:not([for*=Edit])"));
for (int i=0; i < 21; i++ )
{
WebElement conri = conris.get(4);
conri.click();
wait(1);
System.out.println(conri.isSelected());
wait(3);
}


Где-то читал, что надо устанавливать значение в True, но setselected - уже не работает ((

Кто подскажет как быть?

 


(Mykhailo Poliarush) #2

интересно, а есть публичный доступ к вашей странице из интернета?


(Artem) #3

<div class="chkboxSpaser">
<span class="" style=" width:95px;display:inline-block">Абоненты</span>
<input class="hiddenCheckbox" id="roleAbonentsRead" type="checkbox" name="option1">
<label class="prettyCheckbox checkbox list" for="roleAbonentsRead">Чтение</label>
<span class="spacer"></span>
<input class="hiddenCheckbox" id="roleAbonentsWrite" type="checkbox" name="option2">
<label class="prettyCheckbox checkbox list" for="roleAbonentsWrite">Запись</label>
</div>


Вот исходный код.
Там есть скрытый класс (чекбоксов), но у нас форма чекбоксов своя переделанная.

На странице две формы с чекбоксами, поэтому выбирал: label.prettyCheckbox:not([for*=Edit])


(Artem) #4

C одним элементом тоже пробывал, но в другой форме (Edit)


        driver.findElement(By.xpath("//form[@id='editRoleForm']/div[7]/div[5]/label[2]")).click();
        WebElement good = driver.findElement(By.xpath("//form[@id='editRoleForm']/div[7]/div[5]/label[2]"));
        System.out.println(good.isSelected());

 

За длинный xpath - Sorry!


(Artem) #5

Так проверил на другом проекте, isselect() работает (((

В чем может быть проблема у меня?


(Mykhailo Poliarush) #6

может быть в момент проверки происходит javascript ошибка, можете проследить?


(Mykhailo Poliarush) #7

стоп, так вы же выбираете label.prettyCheckbox:not([for*=Edit])

это не input элементы, а вебдрайвер проверяет input элементы.

фактически вам надо проверять, ваши скрытие поля <input class="hiddenCheckbox" id="roleAbonentsWrite" type="checkbox" name="option2">


(Artem) #8

       

Кому надо:

List<WebElement> conris = driver.findElements(By.cssSelector("label.prettyCheckbox:not([for*=Edit])"));
        //Инициировали группу Random
        Random random = new Random();
        //Цикл, который будет повторяться 21 раз.
        //
        for (int i=0; i < 21; i++ )
        {
            int conriIndex = random.nextInt(conris.size());
            WebElement conri = conris.get(conriIndex);

//Находим класс, а в нем слово checked
                if (conri.getAttribute("class").contains("checked"))
                    continue;
                conri.click();
                }

Всем спасибо!

 


(johan) #9

странный метод, если честно.

Скажи если после ПЕРВОГО захода на страницу чекбокс анчекнут то есть ли атрибут "checked=' ' " или есть "checked='false' или его нет вообще?


(Artem) #10

Отдельного атрибута checked=true/false нету.

Есть класс: "prettyCheckbox checkbox list" - это когда чекбокс не активен.

"prettyCheckbox checkbox list checked" - когда активен.

Я и пользовался getAttribute.

Если можно это сделать иначе, то прошу  написать.

 


(Shaman) #11

я делал когда-то свой метод getCheckboxValue, в который передавал вебелемент, после чего через getAttribute проверял значение этого вебелемента и возвращал boolean true or false значение.


(johan) #12

 

сделай тогда просто проверку типа
 
if (locator().getAttribute("checked") != null)     //если чекбкс чекнут
     do something....
 
 
if (locator().getAttribute("checked") == null) //если чекбкс анчекнут
     do something...
 
если ты проверишь все комбинации своего варианта, то ты увидишь, что твоя проверка условия не всегда будет срабатывать.
У меня в моем проекте есть 2 отдельных метода в Common классе для чекания и анчекания чекбоксов  с их проверкой, и это единственный вариант который сработал для всех комбинаций в моем случае.