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


(Maksym Neskoromnyi) #1

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

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

(Ray Romanov) #2

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


(Maksym Neskoromnyi) #3

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

Таже фигня

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


(Ray Romanov) #4

Вот пример на 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-й элемент выпавшего списка
...

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


(Serhii Tanchenko) #5

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();

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