Проверка (isEnabled) не срабатывает

Появилась опять проблема по теме. Выполняю проверку кнопки isEnabled() через дебаг:


аттрибут disabled присутствует, но в лог выводит совершенно другое:


Вроде обращаюсь к элементу правильно. В чем может быть проблема? Спасибо.

И имеет на это полное право - атрибут disabled невалидный для тэга div, и никоим образом не лишает его “кликабельности”.

1 лайк

Тогда каким образом можно выполнить проверку на кликабельность элемента?

Такой способ будет “легален”?:

public void waitEnableButton(WebElement element){			
			for(int i = 0; i<10; i++){
				String atr = element.getAttribute("disabled");
				if(!(atr==null)){
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}					
				}
				else{
					break;
				}			
		}
	}

Чего вы так прицепились к этому атрибуту? Может его UI-щики используют для своих экзотических целей. В Selenium уже вшит встроенный expected condition для проверки элемента на кликабельность. Да и что за велосипеды с циклами и слипами? Как же WebDriverWait?

1 лайк

Не работает expected condition для Div, кликает кнопку даже если она не активна, просто так бы не спросил.

На скрине у вас кнопка активна, но атрибут disabled. Вы проверяете isEnabled() на активной кнопке, что возвращает true, что логично. Кидайте скрин верстки c открытым style и неактивной кнопкой, ибо пока я не вижу, чтобы были соблюдены все условия для ответа на ваш вопрос.

Надеюсь это то, что вы попросили:

На скрине кнопки активны или задизейблены? Как у вас вообще визуально отличаются активные и задизейбленные кнопки между собой? И поставьте Firebug / Firepath. Хотелось бы увидеть результаты поиска по вашему локатору с подсвеченным элементом в верстке, дабы отбросить все сомнения.

П.С. И вообще странно то, что у выделенного элемента display : none стоит.

Различие видно визуально. Пример привел на скринах ниже с подсветкой локатора.

Кнопки активны:

Кнопки не активны:

Интереса ради, что вам выдаст FirePath на CSS .btn[disabled] для активных и неактивных кнопок?

Не активные кнопки:

Активные кнопки:

P.S. теперь вы понимаете почему я “мусолю” эту тему?

Ну так все верно. Если кнопки активны, поиск по .btn[disabled] ничего не даст. Если сделать более точный поиск, к примеру, по .buttonbar-container.btn[disabled], то, наверняка вы получите всего 3 нода - целевые кнопки. Если вы 100% уверены, что изначально они у вас disabled, то почему бы не использовать invisibilityOfElementLocated, чтобы подождать, пока элемент не исчезнет из DOM? Ну технически кнопки то не исчезнут, просто condition вернет true, если findElement бросит эксепшен.

Я предполагал что можно было использовать этот метод, а разве invisibilityOfElementLocated проверит все локаторы на наличие disabled, а не только первый по списку?

Это уже нюансы. Вы можете применить это условие только к одной, нужной вам, кнопке. Кликать то вы будете не по всем сразу. Так что локатор уж сами подбирайте. Суть была как раз в выборе подходящего wait condition.

просто все равно придется на каждую кнопку делать отдельную проверку (они же все потом будут использоваться в дальнейшем), да и выглядеть это будет “копипастом”. Спасибо за совет (P.S. буду благодарен если ответите в теме на мое сообщение).