web-dev-qa-db-ja.com

Selenium-Python-ドロップダウンメニューオプションの値

ドロップダウンメニューから要素を選択する必要があります。

たとえば、これを開きます:

<select id="fruits01" class="select" name="fruits">
    <option value="0">Choose your fruits:</option>
    <option value="1">Banana</option>
    <option value="2">Mango</option>
</select>
  1. 最初にクリックする必要があります。私はこれをします:

    inputElementFruits = driver.find_element_by_xpath("//select["id='fruits']).click()
    

(OK、メニューを開いています)

  1. そして、私は良い要素を選択しなければならない後、マンゴーと言いましょう。 inputElementFruits.send_keys(...)で別のことを試してみましたが、うまくいきませんでした。
118
Adam Bovien

クリックがリストを作成するために何らかの種類のajax呼び出しを起動しない限り、実際にクリックを実行する必要はありません。

要素を見つけてからオプションを列挙し、必要なオプションを選択します。

以下に例を示します。

from Selenium import webdriver
b = webdriver.Firefox()
b.find_element_by_xpath("//select[@name='element_name']/option[text()='option_text']").click()

詳細については、次をご覧ください。
https://sqa.stackexchange.com/questions/1355/unable-to-select-an-option-using-seleniums-python-webdriver

85
alanning

Seleniumは、select -> option構成体を操作するための便利な Select class を提供します。

from Selenium import webdriver
from Selenium.webdriver.support.ui import Select

driver = webdriver.Firefox()
driver.get('url')

select = Select(driver.find_element_by_id('fruits01'))

# select by visible text
select.select_by_visible_text('Banana')

# select by value 
select.select_by_value('1')

こちらもご覧ください:

220
alecxe

最初にSelectクラスをインポートしてから、Selectクラスのインスタンスを作成する必要があります。 Selectクラスのインスタンスを作成した後、そのインスタンスでselectメソッドを実行して、ドロップダウンリストからオプションを選択できます。ここにコードがあります

from Selenium.webdriver.support.select import Select

select_fr = Select(driver.find_element_by_id("fruits01"))
select_fr.select_by_index(0)
18
Vaibhav

私は多くのことを試しましたが、ドロップダウンはテーブル内にあり、単純な選択操作を実行できませんでした。以下のソリューションのみが機能しました。ここでドロップダウン要素を強調表示し、目的の値が得られるまで下矢印を押します-

        #identify the drop down element
        elem = browser.find_element_by_name(objectVal)
        for option in elem.find_elements_by_tag_name('option'):
            if option.text == value:
                break

            else:
                ARROW_DOWN = u'\ue015'
                elem.send_keys(ARROW_DOWN)
6
from Selenium.webdriver.support.ui import Select
driver = webdriver.Ie(".\\IEDriverServer.exe")
driver.get("https://test.com")
select = Select(driver.find_element_by_xpath("""//input[@name='n_name']"""))
select.select_by_index(2)

それはうまくいきます

2
Kuladip

あなたはCSSセレクターの組み合わせをうまく使うことができます

driver.find_element_by_css_selector("#fruits01 [value='1']").click()

Attribute = value cssセレクターの1を、目的のフルーツに対応する値に変更します。

2
QHarr

何もクリックする必要はありません。 xpathまたは任意の選択による検索を使用してから、送信キーを使用します

あなたの例:HTML:

<select id="fruits01" class="select" name="fruits">
    <option value="0">Choose your fruits:</option>
    <option value="1">Banana</option>
    <option value="2">Mango</option>
</select>

Python:

fruit_field = browser.find_element_by_xpath("//input[@name='fruits']")
fruit_field.send_keys("Mango")

それでおしまい。

2
Shane Cheek

オプション値で動作します:

from Selenium import webdriver
b = webdriver.Firefox()
b.find_element_by_xpath("//select[@class='class_name']/option[@value='option_value']").click()
1
Jackssn

Selenium.webdriver.support.ui.Selectクラスを使用してドロップダウン選択を操作する最良の方法ですが、HTMLの設計上の問題またはその他の問題のために、期待どおりに動作しない場合があります。

このタイプの状況では、次のようにexecute_script()を使用する代替ソリューションとしてもお勧めできます。

option_visible_text = "Banana"
select = driver.find_element_by_id("fruits01")

#now use this to select option from dropdown by visible text 
driver.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; } }", select, option_visible_text);
1
Saurabh Gaur