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

Не видит элемент в выпадающем списке, список не видим до клика

Привет, на странице есть дропдаун, он невидим до момента клика на него, на сам дропдаун кликаю, но выбрать из него не получается. Пишет, что не находит элемент. Пробовал и через select сделать и просто через id. Не хочет никак. Сам ко выглядит так.

   public void clickCPUSearch(){
    clickElement(buttonQuickSearchCpu);
    clickElement(driver.findElement(By.id("ui-id-20")));
}

Попробуй через wait т.е. у тебя не успевает появится элемент а ты по нему пытаешься кликнуть

Изменил
public void clickCPUSearch(){ clickElement(buttonQuickSearchCpu); driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS); clickElement(driver.findElement(By.id("ui-id-20"))); }

Таже фигня

Сам элемент есть на странице http://prntscr.com/7lk05s

Вот пример на PHP Codeception:

....    
$I->pressKey(['id' => 'city-' . $masterId], 'Москва'); // Впечатываю город
$I->waitForElementVisible('//ul[@id="ui-id-2"]/li[1]', 3); // Ожидаю появления автосажжеста
$I->click('//ul[@id="ui-id-2"]/li[1]');  // жмакаю на 1-й элемент выпавшего списка
...

у тебя типовой список, у меня в автосажжест формируется динамически от значения в поле ввода. Хотя почти одинаково что данные ввести появится список, что кнопку(ссылку, …) нажать и появится список.

implicit wait сдесь не поможет, нужно использовать explicit, очень полезно почитать и понять разницу, нужно в explicit wait явно ждать появления елемента на странице (имеется в виду, что елемент может присутствовать в ДОМе, но быть невидимым)

WebElement option = new WebDriverWait(webDriver, 3).until(new Function<WebDriver, WebElement>() {
	public WebElement apply(@Nullable WebDriver webDriver) {
	    try {
		return driver.findElement(By.id("ui-id-20"));
	    }
	    catch (WebDriverException wde) {
		return null;
	    }
	}
});
option.click();

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