Выберите значение из ComboBox \ DropDown в Selenium - PullRequest
0 голосов
/ 25 сентября 2019

Я хочу выбрать значение из выпадающего списка, используя селен.значение «Другое». См. PIC enter image description here

. xpath для раскрывающегося списка: // nz-select [@ formcontrolname = 'selectedIntegrationTypes']

код страницы: enter image description here

Это мой код:

public static void selectDropDownByXpath()
    {
        WebDriver driver2 = WebDriverMgr.getDriver();
        Select dropDown = new Select(driver2.findElement(By.xpath("//nz-select[@formcontrolname='selectedIntegrationTypes']")));
        dropDown.selectByVisibleText("Other");
    }

И я получаю это сообщение об ошибке:

org.openqa.selenium.support.ui.UnexpectedTagNameException: Element should have been "select" but was "nz-select"
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'PC', ip: '12.35.12.65', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_65'
Driver info: driver.version: unknown

Можеткто-нибудь, пожалуйста, посоветуйте, как выбрать значение из выпадающегоС уважением

Ответы [ 3 ]

1 голос
/ 25 сентября 2019

Прежде всего, это не тег select, это угловой тег nz-select, вот что говорит и ошибка

Элемент должен был быть "select", но был "nz-select"

Таким образом, вы не можете использовать класс Select, и вам нужно использовать стандартный скрипт.

Вам нужно использовать Xpath, например:

//nz-select/ng-reflect-name='selectedIntegrationtypes'

Использовать стандартскрипт типа:

driver.findElement(By.xpath("//nz-select/ng-reflect-name='selectedIntegrationtypes'")).click();
0 голосов
/ 25 сентября 2019

Попробуйте выбрать функцию indexdex.

Select ddlCCType = new Select(driver.findElement(By.xpath("put xpath here..")));
ddlCCType.selectByIndex("index value..");
0 голосов
/ 25 сентября 2019

Элемент Select ожидает тег select.В вашем случае это тег «nz-select».Следовательно, это выдает ошибку.

Я бы написал выпадающий класс.

   public DropDownMenu(By optionsStrategy, By optionButtonStrategy, IWebDriver driver)
    {
        driver = driver;
        optionContainerStrategy = optionsContainer;
        optionsStrategy = optionsStrategy;
        optionButtonStrategy = optionButtonStrategy;
        optionButton = driver.FindElement(_optionButtonStrategy);           
    }

Где вы можете передать локатор для ваших опций / элемента и локатор для выпадающей кнопки, которая вызовет отображение выпадающего списказначения параметров.

var dropDown = new Dropdown(By.CssSelector("formcontrolname['selectedIntegrationTypes']")),By.CssSelector("[insert options/items identifier here]"), driver)

Теперь мы можем создать метод для выбора параметра

    public void SelectItemByName(string itemName)
    {
        Actions action = new Actions(_driver);
        action.MoveToElement(_optionButton).Click().Build().Perform();
        Thread.Sleep(500);
        GetOption(itemName, _optionsStrategy).Click();
    }

    private IWebElement GetOption(string optionName, By optionStrategy)
    {
        IWebElement optionElement = _driver.FindElements(optionStrategy).Where(x => x.Text.Trim().Trim().Equals(optionName.Trim(), StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
        return optionElement ?? throw new Exception($"Option {optionName} not found.");
    }

    private IReadOnlyCollection<IWebElement> GetOptions(By optionStrategy) => _driver.FindElements(optionStrategy);   

Затем вы можете использовать его с помощью dropDown.SelectItemByName("Other")

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