#python #selenium #select
Вопрос:
Я пытаюсь использовать Select()
find an element
это в раскрывающемся списке. Но я хочу ввести частичный текст и позволить ему выполнить поиск, если элемент содержит его
Питон
thisValue= 1875
thisElemenet = Select(browser.find_element_by_id('id_asset'))
thisElemenet.select_by_value(str(thisValue))
Мой выбранный сценарий
<select name="asset" class="form-control" id="id_asset">
<option value="" selected="">---------</option>
<option value="235">UN-POA-1875 (15) | Bærbar | Lenovo L590 20Q7 i5-8265U 1.6 GHz 8 GB 256 SSD</option>
<option value="221">UN-POA-1929 (01) | Bærbar | Lenovo L490 20Q5 Core i5 8GB 256GB SSD</option>
</select>
Если я ищу 1875 год, я хочу, чтобы он нашел первый вариант.
Комментарии:
1. Можно ли решить другим способом? Вместо использования
Select
.2. Не обязательно должен быть Select (), который мне нужно использовать. Мне просто нужно выбрать Селен, чтобы выбрать первый вариант, если я ищу 1875
3. Что вы имеете в виду, если ищете ? также в поле выбрать вы передаете
id_location
, где находится идентификаторid_asset
.4. исправлена ошибка id_asset. Я имею в виду, что текст в одном из вариантов содержит 1875 год. Я хочу иметь возможность выбрать этот элемент, передав строку 1875
Ответ №1:
Вы можете использовать кнопку выбрать с id_asset
, чтобы найти выпадающий список.
и тогда вы сможете использовать
select#id_asset option
CSS_SELECTOR
чтобы найти все параметры в раскрывающемся списке. Затем повторите выпадающее меню и найдите каждый options (text)
для этого примера, который был бы UN-POA-1875 (15) | Bærbar | Lenovo L590 20Q7 i5-8265U 1.6 GHz 8 GB 256 SSD
для первого варианта, а затем поставьте условие if, чтобы, если он содержит нужный текст, выберите его.
select = Select(driver.find_element(By.ID, "id_asset"))
all_options = driver.find_elements(By.CSS_SELECTOR, "select#id_asset option")
for option in all_options:
if "1875" in option.text:
select.select_by_value(option.get_attribute('value'))
также, если в вашем вопросе
str(thisValue)
представляя 1875 год, вы могли бы заменить приведенную выше строку
if "1875" in option.text:
Для
if str(thisValue) in option.text:
Ответ №2:
Вместо Select
этого попробуйте использовать ниже xpath:
//select[@id="id_asset"]//option[contains(text(), "1875")]
Пожалуйста, попробуйте следующий код:
thisValue = 1875
thisElemenet = browser.find_element_by_xpath('//select[@id="id_asset"]//option[contains(text(), "{}")]'.format(thisValue))
browser.execute_script("arguments[0].click();", thisElemenet)