Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

[Resolved] Как проверить, что чекнут/не чекнут определенный чекбокс? Webdriver + Java


(Ирина Патиевец) #1

Здравствуйте, подскажите, пожалуйста, как проверить, что чекнут/не чекнут определенный чекбокс.
Пробую

Assert.assertFalse(elems.get(1).isSelected ());  
Assert.assertTrue(elems.get(1).isSelected()); 

Но тут ошибка,  get поддчеркивает. Не могу понять в чем причина.
Multiple markers at this line
	- Line breakpoint:TestKabinetReclamodatelya [line: 258] - testMoyaStroyka()
	- Line breakpoint:TestKabinetReclamodatelya [line: 257] - testMoyaStroyka()
	- The method get(String) in the type RemoteWebDriver is not applicable for the arguments (int)"

       //Чекаем все чекбоксы, выбирая все письма
	WebElement oCheckBox = driver.findElement(By.cssSelector(".checkbox__fake"));
 	oCheckBox.click();	 
 	//Нажимаем на ссылку "Отметить как прочитанные"
	driver.findElement(By.linkText("Отметить как прочитанные")).click();
	
java.util.List<WebElement> checkbox = driver.findElements(By.cssSelector(".checkbox__fake"));
    //Выбираем чекбоксы 1,2,3,4,5
    ((WebElement) checkbox.get(1)).click();
    ((WebElement) checkbox.get(2)).click();
    ((WebElement) checkbox.get(3)).click();
    ((WebElement) checkbox.get(4)).click();
    ((WebElement) checkbox.get(5)).click();
        
    //Проверяем что чекбоксы сняты
    Assert.assertFalse(elems.get(6).isSelected ());
     //Проверяем что чекбоксы чекнут
     Assert.assertTrue(elems.get(1).isSelected());

(Руслан) #2

первая ссылка в гугле http://sqa.stackexchange.com/questions/5330/webdriver-check-if-checkbox-is-set-and-set-it-if-not

WebElement checkBox1;
WebElement checkBox3;
checkBox1 = driver.findElement(By.cssSelector("input[value='cb1']"));
checkBox3 = driver.findElement(By.cssSelector("input[value='cb3']"));
if(!checkBox1.isSelected()){
    checkBox1.click();
}
//checkBox3 is selected by default
if(checkBox3.isSelected()){
    checkBox3.click();
}

(Ирина Патиевец) #3

Спасибо большое, видела эту ссылку, пробовало не получалось. Решила, что мне не подходит.

Но, все ок, разобралась.

Если можно подскажите, пожалуйста, а как проверить что чекнуты/не чукнуты все чекбоксы? Их всегда может быть разное количество.


(Sergey Korol) #4

boolean evenOneIsUnchecked = false;

for (WebElement checkbox : driver.findElements(By.cssSelector(".checkbox__fake"))) {
   if (!checkbox.isSelected()) {
       evenOneIsUnchecked = true;
       break;
   }
}

assertFalse(evenOneIsUnchecked);

Обратное действие, думаю, что сами сможете сделать. :wink:


(Ирина Патиевец) #5

да, конечно, спасибо большое :blush:


(Ирина Патиевец) #6

Подскажите, пожалуйста, в первом случае, когда проверяем, что чекбоксы все чекнуты, то если в assertTrue(hasError); выставить False, то тест не проходит((…Хотя чекбоксы все чекнуты…
А так все работает…

//Проверяем, что все чекбоксы чекнуты
boolean hasError = false;
for (WebElement checkbox4: driver.findElements(By.cssSelector(".checkbox__fake"))) {
 if (!checkbox4.isSelected()) {
		   hasError = true;
	       break;
	   }
	}
assertTrue(hasError);
	
	
	//Чекаем на верхний чекбокс, чтобы снять выбор чекбоксов
	driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
	WebElement oCheckBox2= driver.findElement(By.xpath(".//*[@class='table table--hanging table--inbox']/thead/tr/th/label/div"));
	driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
	oCheckBox2.click();	
	
	//Проверяем, что все чекбоксы не чекнуты
	hasError = false;
''''java
	for (WebElement checkbox5: driver.findElements(By.cssSelector(".checkbox__fake"))) {
	   if (checkbox5.isSelected()) {
		   hasError = true;
	       break;
	   }
	}
	assertFalse(hasError);

(Sergey Korol) #7

Я не верю в магию. Если assertFalse(hasError); выплевывает эксепшен, значит как минимум 1 чекбокс остался нечекнутым. Такое возможно, если ваш локатор оказался совсем не уникальным для этой серии чекбоксов.

Самая примитивная проверка моей теории: findElements(...).size(). Более детально можно посмотреть в дебаге. При этом, FirePath также должен показать кол-во найденных нодов по данному локатору.

Прошу заметить также, что данные проверки не отвечают на вопрос - все ли чекбоксы чекнуты / не чекнуты, скорее - есть ли хотя бы 1 чекнутый / нечекнутый чекбокс.