2015-02-05 3 views
1

Мне нужно выбрать элемент из списка по его названию. Я попытался с помощью «Выбрать», но получил сообщение об ошибке «Элемент не отображается в данный момент и поэтому не может взаимодействовать с». Ниже приведен мой сценарий с использованием Select:Как получить элемент по его названию из списка

driver.findElement(By.xpath(".//*[@id='miscinfo_div']/ol/li[1]/div/fieldset/div/div[2]/div/div/ul/li")); 

Select select = new Select(driver.findElement(By.id("companionPositionSelect"))); 
select.selectByVisibleText("Bottom1-Top1"); 

Я также пробовал со списком. Он выбирает элемент по его индексу, но мне нужно выбрать элемент только по его тексту. Я предполагаю, что в списке нет возможности выбрать элемент по его тексту. Это мой сценарий для Списка:

List<WebElement> availableCompPositions = driver 
     .findElements(By 
      .xpath("//input[@id='companionPositionSelect_a_search']//following::div[1]/ul/li")); 
    // select Bottom1-Top1 and add in the SELECTED menu 
    availableCompPositions.get(4).click(); 

Также прилагается HTML-страница. enter image description here

HTML:

<div style="" id="miscinfo_div" class="toggler"> 
<ol> 
<li> 
    <span>17.</span> 
     <label class="shufflelabel"> 
      <div id="companionPositions_label"> 
        <b> Companion Positions </b> 
      </div> 
     </label> 

     <div> 
      <fieldset class="shuttle_fieldset"> 
      <legend></legend> 

     <div class="shuffle-box"> 
     <select multiple="" id="companionPositionSelect" class="select2side" name="companionPositionSelect" style="display: none;"> 

      <option value="20408" title="Bottom-BottomLeft-BottomRight">Bottom-BottomLeft-BottomRight</option> 

      <option value="20391" title="Bottom-Middle-Top">Bottom-Middle-Top</option> 

      <option value="20382" title="Bottom-Top" selected="selected">Bottom-Top</option> 

      <option value="20392" title="Bottom1-Middle1-Top1" selected="selected">Bottom1-Middle1-Top1</option> 

      <option value="20383" title="Bottom1-Top1">Bottom1-Top1</option> 

      <option value="20393" title="Bottom2-Middle2-Top2">Bottom2-Middle2-Top2</option> 

     </select> 

    </div> 
+0

Предоставлять HTML код не изображения – Saifur

+0

и 'selectByValue()' вариант? – Saifur

+0

Да, но это порождает ошибку, что такой опции нет. Я добавил HTML выше. Благодаря! – familyGuy

ответ

3

Глядя на ошибки я предполагаю, что вы пытаетесь выполнить действие слишком рано. Следующая программа должна ждать максимум 10s явно для элемента должен быть расположен

Добавлено explicit ждать, чтобы ждать, пока элемент не существует

//explicit wait 
By byCss = By.cssSelector("#companionPositionSelect>option[value='20383']"); 
WebElement element = new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(byCss)); 
     element.click(); 
+0

Извините, не повезло. Он истекает после 10 ... – familyGuy

+0

Нажмите «div», затем нажмите «select» и используйте wait, и вы получаете исключение «NoSuchElement»? – Saifur

+0

Да NoSuchElementException: Не удается найти опцию со значением: 20383. У меня есть элемент с номером 20383 в списке. – familyGuy

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