0

我有一组选项的角材料下拉列表,并且试图选择其中一个选项。我选择它们如下:无法使用Selenium选择一个md-select下拉选项

HTML文件:

<md-select name="myDropdown" 
      ng-model="addCompany.details.someModel" 
      ng-change="addCompany.swapDisplayedAreas()" 
      required> 

    <md-option value="Company A">Company A</md-option> 
    <md-option value="Company B">Company B</md-option> 
</md-select> 

蟒蛇测试:

input = self.browser.find_element_by_name('myDropdown') 
input.click() 
choice = self.browser.find_element_by_xpath("//*[contains(text(), 'Company A')]") 
choice.click() 

但是,不管我如何努力选择选项,我要么会收到以下错误:

selenium.common.exceptions.WebDriverException: Message: Element is not clickable at point (750, 423). Other element would receive the click: <md-backdrop style="position: fixed;" class="md-select-backdrop md-click-catcher ng-scope"></md-backdrop>

或者我可以看到元素被点击,但下拉仍然保持拉出状态。试图点击页面上的任何其他元素,而下拉菜单仍然拉出时,会出现类似的md-backdrop会收到点击错误。

任何想法如何选择一个md-select元素的下拉选择?我试过为我的输入元素禁用md-backdrop而没有任何成功。

+0

你在Chrome上运行这个吗? –

+0

不,使用Firefox。 – orange1

回答

1

你应该尝试使用WebDriverWait等到选项,从下拉开放和获取可见和可点击之前点击如下图所示: -

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

#find dropdown and click to open options 
input = self.browser.find_element_by_name('myDropdown') 
input.click() 

#now wait until options getting visible and clickable 
choice = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "md-option[value = 'Company A']"))) 
choice.click() 
0

我猜想问题可能是下列之一:

  1. 页面上还有另一个文本为“公司A”的元素,即使下拉选项显然是您希望硒单击的元素,该元素也会尝试点击。这是因为硒单击了满足标识符的第一个元素。要检查这是否是问题,我将使用查找元素并检查找到了多少元素。如果这是问题,请尝试使用诸如值之类的CSS选择器。

  2. 如果您正在使用chrome,则在测试角度应用程序时,我遇到了与chrome webdriver类似的问题。

这是问题https://code.google.com/p/selenium/issues/detail?id=2766 我试图雅致的环境,但没有工作......最终我使用Lukeis的解决方案。

在java中

int n=10; 
    String errorMessage; 
    for (int i=1; i<=n; i++) 
    { 
     try { 
      clickThis.click(); 
      break; 
     } catch(WebDriverException driverException) { 
      Thread.sleep(1000); 
      errorMessage = driverException.toString(); 
     } 
     if(i==n) 
     { 
      Assert.fail("Failed to click "+n+" times \n" + errorMessage); 
     } 
    } 

它几乎尝试点击元素的10倍。

相关问题