0

オプションのセットで角材料ドロップダウンがあり、オプションの1つを選択しようとしています。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> 

Pythonのテスト:

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バックグラウンドでクリックエラーが発生します。

md-select要素のドロップダウンリストはどのように選択できますか?私は何も成功せずに私の入力要素のためにmd-backdropを無効にしようとしました。あなたがドロップダウンから開いてオプションまで待機すると、可視およびクリッカブル前に、以下のようにクリックなっWebDriverWaitを使用してみてください

+0

これはChromeで実行していますか? –

+0

いいえ、Firefoxを使用しています。 – orange1

答えて

1

: -

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. "Company A"のテキストを持つページに別の要素があり、ドロップダウンオプションが明らかにセレンがクリックしたい要素であっても、その要素がクリックされようとしています。これは、セレンが識別子を満たす最初の要素をクリックするためです。これが問題かどうかを調べるには、find要素を使い、見つかった要素の数を確認します。それが問題の場合は、値などのcssセレクタを使用してみてください。

  2. クロムを使用している場合は、角型アプリケーションをテストするときにクロムウェブドライバで同様の問題が発生しました。

これが問題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回クリックしようとします。

関連する問題