Selenium python, используя Select() select_by_value(), для поиска, содержит ли строка

#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)