Как выбрать элемент из списка в multi_select в Селене Java - PullRequest
0 голосов
/ 21 мая 2018

что я пробовал:

Select listbox = new Select(
       driver.findElement(By.xpath("//*[@id='multiselect_categories']"))
);
listbox.selectByValue("ATM");

HTML-код при выборе какой-либо опции:

<input name="multiselect_categories" id="multiselect_categories" 
       type="text" autocomplete="off" placeholder="Select option" 
       tabindex="0" class="multiselect__input" style="display: none;">

<div class="multiselect__tags">
  <div class="multiselect__tags-wrap" style="">
    <span class="multiselect__tag">
      <span>Actions and Practices</span>
      <i aria-hidden="true" tabindex="1" class="multiselect__tag-icon"></i>
    </span>
    <span class="multiselect__tag">
      <span>Air Carrier Services and Safety Oversight</span>
      <i aria-hidden="true" tabindex="1" class="multiselect__tag-icon"></i>
    </span>
  </div>
  <div class="multiselect__spinner" style="display: none;"></div>
  <input name="multiselect_categories" id="multiselect_categories" 
         type="text" autocomplete="off" placeholder="Select option" 
         tabindex="0" class="multiselect__input" 
         style="width: 0px; position: absolute; padding: 0px; display: none;">  
</div>

<div class="multiselect__content-wrapper" style="max-height: 291.375px; display: none;">
  <ul class="multiselect__content" style="display: inline-block;">
    <li class="multiselect__element">
      <span data-select="Press enter to select" data-selected="Selected" 
            data-deselect="Press enter to remove" class="multiselect__option">
        <span>ATM</span>
      </span> 
    </li>
    <li class="multiselect__element">
      <span data-select="Press enter to select" data-selected="Selected" 
            data-deselect="Press enter to remove" class="multiselect__option 
            multiselect__option--selected">
        <span>Actions and Practices</span>
      </span> 
    </li>
    <li class="multiselect__element">
      <span data-select="Press enter to select" data-selected="Selected" 
            data-deselect="Press enter to remove" class="multiselect__option 
            multiselect__option--selected">
        <span>Air Carrier Services and Safety Oversight</span>
      </span>
    </li>
  </ul>
</div>

КОД, который не был добавлен при добавлении к коду селена при добавлении в testng:

@Test(description = "Test5")
public void chooseCatagory(String... catagories) {
    for(String catagory: catagories) {
        // input catagory in text box which display placeholder `Select option`
        driver.findElement(By.cssSelector("div.multiselect__tags #multiselect_categories"))
            .sendKeys(catagory);
        // find the item from auto-suggest list
        driver.findElement(By.cssSelector("div.multiselect__tags + div > ul"))
            .findElement(By.xpath("./li//span[text()='"+catagory+"']"))
            .click();
    }
}
chooseCatagory("ATM", "Airports");

Ошибка из приведенного выше кода: org.testng.TestNGException: Невозможно внедрить аннотированный метод @Test [chooseCatagory] с помощью [class [Ljava.lang.String;].Для получения дополнительной информации о внедрении собственных зависимостей см. http://testng.org/doc/documentation-main.html#native-dependency-injection org.testng.TestNGException:

HTML, когда ничего не выбрано:

<input name="multiselect_categories" id="multiselect_categories" 

type="text" autocomplete="off" placeholder="Select option" tabindex="0" class="multiselect__input" style="display: none;">
<span><span class="multiselect__single">
            Select option
          </span></span>

что содержится в списке: ATM, Action, см. Скриншот

1 Ответ

0 голосов
/ 21 мая 2018
@Test(description = "Test5")
public test_chooseCatagory() {
    chooseCatagory("ATM", "Airports");
}

private void chooseCatagory(String... catagories) {
    for(String catagory: catagories) {
        // click the down arrow at right to make the filter text box and
        // all option list display
        driver.findElement(By.cssSelector("div.multiselect__select"))
          .click();

        // input catagory into text box to filter matched options
        driver.findElement(By.cssSelector(".multiselect__tags #multiselect_categories"))
          .sendKeys(catagory);

        // click the option from filtered option list 
        driver.findElement(By.cssSelector(".multiselect__content-wrapper > ul"))
          .findElement(By.xpath("./li//span[text()='"+catagory+"']"))
          .click();

        // sleep 2 seconds before next choosing
        try {
         Thread.sleep(2000);
        }
        catch(Exception e) {
        } 
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...