代码之家  ›  专栏  ›  技术社区  ›  Magnus Jensen

量角器在下拉列表中选择元素

  •  0
  • Magnus Jensen  · 技术社区  · 7 年前

    在下拉列表中查找元素时遇到问题。尝试使用chrome中的开发人员工具来识别它会导致在单击下拉列表时禁用本地化工具。html如下所示:

    <select ng-model="relation.rolle" name="relationType" required="" 
      class="uniform form-control ng-touched ng-dirty ng-valid-parse ng-invalid 
      ng-invalid-required" ng-class="::formControlClass()" ng- 
      options="relationType.name as relationType.label for relationType in 
      relationTypes">
      <option value="" class="ng-binding">Velg...</option>
      <option value="0" label="Samboer">Samboer</option>
      <option value="1" label="Ektefelle">Ektefelle</option>
      <option value="2" label="Foresatt">Foresatt</option>
    </select>
    

    2 回复  |  直到 7 年前
        1
  •  1
  •   tehbeardedone    7 年前

    Bharath发布的示例很简单,而且会起作用。你只需要确定先点击选择菜单。否则,将出现“找不到元素”错误或“无法单击”错误。必须先打开菜单,然后才能单击 option .

    我的例子有点复杂,但这里是我通常如何处理下拉菜单。我已经创建了一个通用函数,可以用于任何选择菜单。您只需传入menu元素和要查找的文本。我这样做是因为我正在开发的应用程序有很多下拉菜单。这样我就不必为菜单中的每个选项都创建变量。一些菜单有很多选项,为每个菜单创建一个变量会很痛苦。

    public async selectDropdownOption(dropdown: ElementFinder, optionText: string): Promise<void> {
        await dropdown.click(); // open the menu
    
        const relevantOption = await dropdown.all(by.tagName('option'))
            .filter((element: ElementFinder) => {
                return element.getText().then((text: string) => {
                    return text === optionText;
                });
            })
            .first();
    
        await relevantOption.click();
    }
    

    在你的情况下,我可以这样称呼它:

    const menu = element(by.name('relationType'));
    selectDropdownOption(menu, 'Samboer');
    
        2
  •  0
  •   Bharath Kumar S    7 年前

    希望这个有用。我用这个。

    element(by.cssContainingText('option', 'Samboer')).click();
    

    (或)

    element(by.model('relation.rolle')).$('[value="Samboer"]').click();
    

    选择下拉列表并选择其值。

    第一个示例更通用,第二个示例对于下拉列表更具体。