2016-10-07 4 views
1

У меня есть страница с 1 текстовым полем и 2 поля выбора. Когда я выбираю значение в первом раскрывающемся списке, это вызывает обратную передачу, а второй раскрывающийся список заполняется.Невозможно выбрать раскрывающийся список с селеном

Это работает на 1 шт., Но не на тестовом сервере.

Когда я запускаю тесты selenium maven на тестовом сервере, я всегда получаю «Невозможно найти элемент». Я пробовал с таймерами, свободно, неявным и явным, но без успеха.

Любые идеи?

+2

Не могли бы вы также поделиться своим кодом, который вы уже пробовали? –

+0

... и ссылку на страницу и/или соответствующий HTML. – JeffC

ответ

-1

Вы можете добавить задержку после выбора первого раскрывающегося списка с использованием Thread.sleep().

+0

'Thread.sleep()' не является хорошей практикой. Вместо этого вы должны использовать 'WebDriverWait', чтобы вы только подождали минимально необходимое время. – JeffC

-2

Всегда используйте Thread.sleep() минимум 3 секунды, пока вы перемещаетесь с разных страниц или выбираете из раскрывающегося списка и многих других.

+0

'Thread.sleep()' не является хорошей практикой. Вместо этого вы должны использовать 'WebDriverWait', чтобы вы только подождали минимально необходимое время. – JeffC

1
WebDriverWait wait = new WebDriverWait(driver, 10); 
wait.until(ExpectedConditions.visibilityOfElementLocated(<Element Locator>)); 

Существует много вариантов в ожидаемых сделках, выберите любое согласно вашему требованию. Здесь Element locator - ваш второй идентификатор локатора выпадающего списка.

0

@ user3436977, я хотел бы использовать FluentWait в этой ситуации. Вот полный пример того, как обращаться с подобной ситуацией. Я использую зависимое выпадающее меню из общедоступного webapp. В этой логике я жду раскрывающегося списка «State», пока не получу значение параметра больше 5 (это докажет, что динамический элемент загружен в DOM).

@Test(enabled=true) 
public void dependentDropdown(){ 
    WebDriver driver = new FirefoxDriver(); 
    driver.get("http://phppot.com/demo/jquery-dependent-dropdown-list-countries-and-states/"); 
    driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS); 
    WebDriverWait wait = new WebDriverWait(driver, 30); 
    Select country = new Select(wait.until(ExpectedConditions.presenceOfElementLocated(By.id("country-list")))); 
    country.selectByVisibleText("India"); 

    FluentWait<WebElement> waitFor_state_list_population = new FluentWait<WebElement>(driver.findElement(By.id("state-list"))); 
    wait.withTimeout(60, TimeUnit.SECONDS).pollingEvery(1, TimeUnit.MILLISECONDS).ignoring(NoSuchElementException.class); 

    com.google.common.base.Function<WebElement, Boolean> elementLoaded = new com.google.common.base.Function<WebElement, Boolean>() { 

     @Override 
     public Boolean apply(WebElement ele) { 
      return ele.getTagName().equals("select")? new Select(ele).getOptions().size()>5? true: false: false; 
     } 
    }; 

    if(waitFor_state_list_population.until(elementLoaded)){ 
     Select state = new Select(driver.findElement(By.id("state-list"))); 
     state.selectByVisibleText("Delhi"); 
    } 

    driver.close(); 
    driver.quit(); 

} 

Надеюсь, это поможет.

Смежные вопросы