Javascript 使用Md select时,如何在量角器中下拉列表?

Javascript 使用Md select时,如何在量角器中下拉列表?,javascript,angularjs,selenium,protractor,Javascript,Angularjs,Selenium,Protractor,我试图从下拉列表中选择一个选项,但找不到定位器,我尝试了许多不同的方法,但都没有帮助 类型 蓝色商务区(AF/KL) 合作伙伴附加福利(LH) 电子商务(BA/AA/IB) SAS信用卡(SK) 芬兰航空公司(AY) 挪威奖励(DY) 挪威奖励(D8) 朝天(EK) 葡萄牙航空(TAP) 这将在下拉列表中选择文本“SAS信用卡(SK)”,您可以根据您的DOM替换值: element(by.id("select_container_2163")).element(by.css("[value='

我试图从下拉列表中选择一个选项,但找不到定位器,我尝试了许多不同的方法,但都没有帮助

类型
蓝色商务区(AF/KL)
合作伙伴附加福利(LH)
电子商务(BA/AA/IB)
SAS信用卡(SK)
芬兰航空公司(AY)
挪威奖励(DY)
挪威奖励(D8)
朝天(EK)
葡萄牙航空(TAP)
这将在下拉列表中选择文本“SAS信用卡(SK)”,您可以根据您的DOM替换值:

element(by.id("select_container_2163")).element(by.css("[value='SK']")).click();

此下拉列表是使用,
div和span
创建的,因此选择类在这种情况下不起作用

您必须使用列表存储下拉列表中的每个元素,然后您可以按所需文本选择它。比如:

 List<WebElement> allValues =   driver.findElements(By.cssSelector("div.md-text"));
     for(WebElement values : allValues) {
         if(values.getText().trim().contains("SAS Credit (SK)")) {
             values.click();
         }   
     }
List allValues=driver.findElements(By.cssSelector(“div.md-text”);
for(WebElement值:allValues){
if(values.getText().trim()包含(“SAS信用(SK)”){
值。单击();
}   
}

您可以通过.cssContainingText()使用
进行如下尝试:

element(by.css('.md-select-menu-container md-select-menu md-content md-option')).element(by.cssContainingText('.md-text', 'Blue Biz (AF/KL)')).click();
此代码选择值为“蓝色业务(AF/KL)”的选项

如果上述代码不起作用,请尝试以下代码:

function clickOption(searchText) {
    let wrapper = element(by.css('.md-select-menu-container'));
    let selectMenu = wrapper.element(by.css('md-select-menu'));
    let mdContent = selectMenu.element(by.css('md-content'));
    let options = mdContent.all(by.css('md-option'));
    return options.filter(el => {
      return el.element(by.css('.md-text')).getText().then(text => text.trim() === searchText);
    }).first().click();
  }

// ...
clickOption('Blue Biz (AF/KL)');

在这段代码中,所有选择器都是分离和链接的。这样,您可以确定实际上找不到哪个选择器。也许这已经是第一次了。除此之外,此函数实际上返回匹配的
md选项
元素。可能无法
单击()
底层的
div

最后我可以单击下拉列表)


“…我试过很多不同的东西…”。向他们展示这看起来不像JavaScript+量角器syntax@Andersson:是的,andersson,它不在JS中,尽管它在JAVA中。不幸的是,它根本不起作用,NoTouchElementError:使用locator:By(css选择器,md选择菜单容器)@nikhil:Hi,找不到元素<代码>由(css选择器,md选择菜单容器)
不是我提供的。您可以尝试使用我在问题中提供的css选择器。这段代码是用java编写的,我对JS不是很确定。如果有帮助,请告诉我。因为找不到元素,这太奇怪了((@nikhil我更新了我的答案。我注意到选择器中缺少一些标记。这个选择器现在应该可以工作了,否则我也会感到困惑。除此之外,第一个选择器在我之前的答案中是错误的。它是
md select menu container
而不是
。md select menu container
,我忘记了类名称的
s、 我之前也尝试过,我的朋友:),现在我正在抓挠我的头点击选项(searchText:string),当前javascript不支持的类型,得到错误语法错误:意外标记:在Object.runinthiscoxt(vm.js:139:10)的createScript(vm.js:80:10)在Object.runinthiscoxt(vm.js:139:10)在Module.\u compile(Module.js:616:28)在Object.Module.\u extensions..js(Module.js:663:10)在Module.load(Module.js:565:32)在tryModuleLoad(Module.js:505:12)在Function.Module.\u load(Module.js:497:3)在Module.require(Module.js:596:17)在require(internal/Module.js:11:18)考虑使用xy坐标来单击元素,我不喜欢这样,我再次调整了javascript的答案:)
   var dropdown = element(by.model('card.type'));
      var dropdownItems = element.all(by.repeater("loyaltyCard in ::$ctrl.loyaltyCards"));

      dropdown.click().then(() => {
          dropdownItems.get(2).click();
      });