web-dev-qa-db-ja.com

メッセージ:Seleniumのドロップダウンメニュー内のオプションをクリックしようとしたときに、要素<option>をスクロールして表示できませんでした

ドロップダウンメニューを選択してオプションを選択しようとしています。私は最新バージョンのSelenium、最新バージョンのFirefox、最新バージョンのgeckodriver、および最新バージョンのPythonを使用しています。

これが私の問題です。オプションを選択しようとすると、次のエラーが発生します。

Selenium.common.exceptions.ElementNotInteractableException: Message: Element <option> could not be scrolled into view.

私はこの問題を回避するためにさまざまな方法を試しましたが、どれもうまくいかないようです。これが私が試したアプローチのいくつかです。

mySelectElement = browser.find_element_by_id('providerTypeDropDown')
dropDownMenu = Select(mySelectElement)
dropDownMenu.select_by_visible_text('Professional')

mySelectElement = browser.find_element_by_id('providerTypeDropDown')
dropDown = Select(mySelectElement)
for option in dropDown.options:
    message = option.get_attribute('innerText')
    print(message)
    if message == 'Professional':
        print("Exists")
        dropDown.select_by_visible_text(message) 
        break

element = browser.find_element_by_id('providerTypeDropDown')
browser.execute_script("var select = arguments[0]; for(var i = 0; i < select.options.length; i++){ if(select.options[i].text == arguments[1]){ select.options[i].selected = true; } }", element, "Professional")

HTMLコードは、通常のselectタグとoptionタグに従います。どんな助けでも大歓迎です。 HTMLコードは以下に含まれています。

<select data-av-chosen="providerTypes" id="providerTypeDropDown" data-placeholder="Please Select a Provider Type" name="providerTypeDropDown"
class="chzn-select input-full ng-pristine chzn-done ng-invalid ng-invalid-provider-type" data-ng-options="providerType.value for providerType in request.models.providerTypes"
data-ng-model="request.models.providerType" data-av-validator-field="providerType" data-disable-search-threshold="5" style="display; none;">
    <option value="" class="">Please Select a Provider Type</option>
    <option value="0">Professional</option>
    <option value="1">Institutional</option>
</select> 

Printステートメントは、テスト/コードトレースを目的としたものです。

2
S.Srikanth

このエラーメッセージ...

Selenium.common.exceptions.ElementNotInteractableException: Message: Element <option> could not be scrolled into view.

... <option>プログラムが操作しようとしていたアイテムをスクロールして表示できませんでした。

目的の要素の[〜#〜] html [〜#〜]は、エラーの背後にあるいくつかのアイデアを与えてくれます。ただし、目的の要素はclickable/ Viewport 内ではなかったようです。この問題に対処するには、要素がクリック可能になるようにWebDriverWaitを誘導する必要があり、次の解決策を使用できます。

mySelectElement = browser.find_element_by_id('providerTypeDropDown')
dropDownMenu = Select(mySelectElement)
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='providerTypeDropDown']//options[contains(.,'Professional')]")))
dropDownMenu.select_by_visible_text('Professional')

:次のインポートを追加する必要があります:

from Selenium.webdriver.support.ui import WebDriverWait
from Selenium.webdriver.common.by import By
from Selenium.webdriver.support import expected_conditions as EC
from Selenium.webdriver.support.select import Select
3
DebanjanB

待機を追加してみてください:

mySelectElement = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "providerTypeDropDown")))
mySelectElement.click()

要素がクリック可能になるまで少なくとも10秒間待機してから、クリックします。

また、ドロップダウンメニューを開くドロップダウンボタンをクリックしたこともコードに表示されません。このボタンを見つけ、待機を追加してクリックしてから、オプションを選択します。それが役に立てば幸い。

注:このコードでは、いくつかのインポートを追加する必要があります。

from Selenium.webdriver.support.wait import WebDriverWait
from Selenium.webdriver.support import expected_conditions as EC
1
Andrei Suvorkov