Selenium Java, чтобы выбрать из выпадающего меню - PullRequest
0 голосов
/ 03 июля 2018

Я ценю, что варианты этого вопроса уже опубликованы, однако я прочитал и попробовал все варианты из этих сообщений, но безуспешно. Я думаю, что в моем случае в HTML есть что-то, что мешает работе решений, в частности класс css ui-helper-hidden-accessible.

Вот мой HTML

<div id="myform:selectCharacteristic" class="ui-selectonemenu ui-widget ui-state-default ui-corner-all">
<div class="ui-helper-hidden-accessible">
    <input id="myform:selectCharacteristic_focus" type="text" autocomplete="off" role="combobox" aria-haspopup="true" aria-expanded="false" />
</div>
<div class="ui-helper-hidden-accessible">
    <select id="myform:selectCharacteristic_input" tabindex="-1" data-p-con="javax.faces.Integer" data-p-hl="onemenu">
        <option value="1">Hatchback</option>
        <option value="2">Estate</option>
        <option value="3">Saloon</option>
    </select>
</div>
<label id="myform:selectCharacteristic_label" class="ui-selectonemenu-label ui-inputfield ui-corner-all">&nbsp;</label>
<div class="ui-selectonemenu-trigger ui-state-default ui-corner-right">
    <span class="ui-icon ui-icon-triangle-1-s ui-c"></span>
</div>
<div id="myform:selectCharacteristic_panel" class="ui-selectonemenu-panel ui-widget ui-widget-content ui-corner-all ui-helper-hidden ui-shadow">
    <div class="ui-selectonemenu-items-wrapper" style="height:200px">
        <ul id="myform:selectCharacteristic_items" class="ui-selectonemenu-items ui-selectonemenu-list ui-widget-content ui-widget ui-corner-all ui-helper-reset" role="listbox">
            <li class="ui-selectonemenu-item ui-selectonemenu-list-item ui-corner-all" data-label="Hatchback" tabindex="-1" role="option">Hatchback</li>
            <li class="ui-selectonemenu-item ui-selectonemenu-list-item ui-corner-all" data-label="Estate" tabindex="-1" role="option">Estate</li>
            <li class="ui-selectonemenu-item ui-selectonemenu-list-item ui-corner-all" data-label="Saloon" tabindex="-1" role="option">Saloon</li>
        </ul>
    </div>
</div>

Я пробовал разные вещи, включая
org.openqa.selenium.support.ui.Select.selectByIndex() и org.openqa.selenium.support.ui.Select.selectByVisibleText() пытаются выполнить щелчок с помощью Действия, а затем отправляют Keys.UP и Keys.DOWN. Однако эти варианты не были успешными.

Я был бы очень признателен за решение, которое может выбрать элемент из выпадающего списка, начиная только со значения метки. То есть, если я хочу выбрать «Салон», я не обязательно знаю, что он имеет значение индекса 3. Кроме того, раскрывающийся список может содержать много других параметров, для которых требуется прокрутка в раскрывающемся меню.

Большое спасибо

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

В соответствии с HTML вы указали опции Хэтчбек , Estate и Салон , кажется, <li> предметов. Для выбора Салон вы можете использовать следующее решение:

driver.findElement(By.xpath("//input[@id='myform:selectCharacteristic_focus']")).click();
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//ul[@class='ui-selectonemenu-items ui-selectonemenu-list ui-widget-content ui-widget ui-corner-all ui-helper-reset' and @id='myform:selectCharacteristic_items']//li[@class='ui-selectonemenu-item ui-selectonemenu-list-item ui-corner-all' and @data-label='Saloon']"))).click();
0 голосов
/ 03 июля 2018

https://prnt.sc/k227pf в вашем случае «Выбрать» из селена не работает, потому что JSF переопределяет базовый выбор, вам нужно написать свои собственные методы для выбора выпадающих элементов. http://prntscr.com/k22c9v это может быть что-то вроде этого:

`

//xpath_for_element_that_can_open_dropdown
 @FindBy(xpath = "//div[contains(@class, 'ui-selectonemenu-trigger')]/span")
 private WebElement SELECT_CORNER;
 //xpath_for_all_elements_indropdownlist
 @FindBy(xpath = "//div[@class='ui-selectonemenu-items-wrapper']//li")
    private List<WebElement> DROPDORN_LIST_ELEMENTS;
    public void selectSomeOption(String dropdownItemToBeSelected){
        SELECT_CORNER.click();
        for (WebElement dropdownListElement : DROPDORN_LIST_ELEMENTS) {
            if (dropdownItemToBeSelected.equals(dropdownListElement.getText())){
                dropdownListElement.click();
                break;
            }
        }
    }

`

0 голосов
/ 03 июля 2018

Я попробовал это, и все работает нормально.

System.setProperty("webdriver.chrome.driver", "chromedriver");              
driver = new ChromeDriver();

driver.get("file:///Desktop/test.html");
Thread.sleep(1000);

Select dropdown = new Select(driver.findElement(By.id("myform:selectCharacteristic_input")));
dropdown.selectByVisibleText("Saloon");     
Thread.sleep(1000);  

Этот код выбирает значение Saloon из раскрывающегося списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...