从硒中的ComboBox \ DropDown中选择值

时间:2019-09-25 10:26:31

标签: selenium selenium-webdriver xpath selenium-chromedriver

我想使用硒从下拉列表中选择一个值。 值是“其他”(参见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 个答案:

答案 0 :(得分:1)

首先,这不是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();

答案 1 :(得分:0)

一个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")

使用它

答案 2 :(得分:-1)

尝试selectbyindex函数。

Select ddlCCType = new Select(driver.findElement(By.xpath("put xpath here..")));
ddlCCType.selectByIndex("index value..");