ドロップダウンメニューから要素を選択する必要があります。
たとえば、これを開きます:
<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>
最初にクリックする必要があります。私はこれをします:
inputElementFruits = driver.find_element_by_xpath("//select["id='fruits']).click()
(OK、メニューを開いています)
inputElementFruits.send_keys(...)
で別のことを試してみましたが、うまくいきませんでした。クリックがリストを作成するために何らかの種類の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
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')
こちらもご覧ください:
最初に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)
私は多くのことを試しましたが、ドロップダウンはテーブル内にあり、単純な選択操作を実行できませんでした。以下のソリューションのみが機能しました。ここでドロップダウン要素を強調表示し、目的の値が得られるまで下矢印を押します-
#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)
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)
それはうまくいきます
あなたはCSSセレクターの組み合わせをうまく使うことができます
driver.find_element_by_css_selector("#fruits01 [value='1']").click()
Attribute = value cssセレクターの1を、目的のフルーツに対応する値に変更します。
何もクリックする必要はありません。 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")
それでおしまい。
オプション値で動作します:
from Selenium import webdriver
b = webdriver.Firefox()
b.find_element_by_xpath("//select[@class='class_name']/option[@value='option_value']").click()
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);