Попытка заставить селен работать, используя раскрывающееся меню (выбрать элемент) - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь получить селен, чтобы выбрать значение c в раскрывающемся меню.

Вот изображение элементов. enter image description here

Вот код элемента.

<select _ngcontent-c31="" class="input productEntry ng-valid ng-touched ng-dirty" formcontrolname="handlingUnit" tabindex="1022" style="">
    <option _ngcontent-c31="" value="0">N/A</option>
    <!---->
    <option _ngcontent-c31="" value="1" class="ng-star-inserted">Pallet</option>
    <option _ngcontent-c31="" value="2" class="ng-star-inserted">Skid</option>
    <option _ngcontent-c31="" value="3" class="ng-star-inserted">Loose</option>
    <option _ngcontent-c31="" value="4" class="ng-star-inserted">Other</option>
    <option _ngcontent-c31="" value="5" class="ng-star-inserted">Gaylord</option>
    <option _ngcontent-c31="" value="6" class="ng-star-inserted">Master Bundles</option>
    <option _ngcontent-c31="" value="7" class="ng-star-inserted">Carrier</option>
</select>

Вот изображение сайта, на котором я пытаюсь получить селен на авто -Выбрать. Это для категории "Единица обработки". Я хочу выбрать паллету. (Первый вариант - N / A, второй - Pallet, третий - Skid et c)

Interface

Я пробовал следующий код.

from selenium.webdriver.support.ui import Select

select_element = Select(driver.find_element(By.XPATH, "//select[@class='input productEntry ng-valid ng-dirty ng-touched']"))
select_element.select_by_value('$1')

Эта строка вызывает ошибку в остальной части моего кода. Каков наилучший способ кодирования выбранного элемента с селеном?

Обновленное решение

select_element = Select(driver.find_element_by_xpath('/html[1]/body[1]/app-root[1]/div[1]/div[1]/app-record[1]/div[1]/div[2]/div[1]/app-record-quoting[1]/div[1]/app-record-product-list-panel[1]/form[1]/div[3]/div[1]/div[3]/div[1]/select[1]'))
select_element.select_by_value('1')

1 Ответ

1 голос
/ 20 февраля 2020

Вы должны использовать метод Select следующим образом:

select_element = Select(driver.find_element_by_xpath(''))
select_element.select_by_value('$1')

Также вы можете использовать full Xpath вместо Xpath, чтобы получить элемент с selenium. На вашей картинке вы должны получить abs Xpath. это то же самое, что полный Xpath, который я сказал.

Чтобы получить элемент с селеном, вы можете использовать это:

driver.find_element_by_xpath('')

Если вы хотите щелкнуть по нему, используйте это:

driver.find_element_by_xpath('').click()

Если вы хотите получить текст элемента, используйте это:

driver.find_element_by_xpath('').text

Если вы хотите написать текст в элементе, используйте это:

driver.find_element_by_xpath('').send_keys('')

Вы можете использовать и abs, и rell Xpath, но проблема в abs Xpath заключается в том, что любые изменения в html могут привести к тому, что селен не найдет элемент или не найдет неправильный элемент.

...