Как выбрать выпадающее меню в Python с помощью Selenium - PullRequest
0 голосов
/ 31 января 2019

Я хочу знать, как выбрать опцию из выпадающего списка на веб-сайте.

HTML здесь

<thead>
    <td style="width: 40%;">
        <select name="product_size" id="sct-size" data-md-selectize>
            <option value="-">Choose Size</option>
                                                    <option value="323">XS</option>
                                                    <option value="324">S</option>
                                                    <option value="325">M</option>
                                                    <option value="326">L</option>
                                                    <option value="327">XL</option>
                                                    <option value="328">XXL</option>
                                                    <option value="342">1 years old</option>
                                                    <option value="343">5 years old</option>
                                                    <option value="344">8 years old</option>
                                                    <option value="345">12 years old</option>
                                                </select>
    </td>
    <td style="width: 40%;">
        <select name="product_color" id="sct-color" data-md-selectize>
            <option value="-">Choose Color</option>
                                                    <option value="594">N/A</option>
                                                </select>
    </td>
    <td style="width: 19%;"><input type="text" class="md-input" name="product_stock_" id="inp-stock" placeholder="Stock" style="margin-top: -11px;text-align: center;"/></td>
    <td style="width: 1%;"><a href="#" id="btn-addstock" style="margin-top: 5px; display: block;" title="Add Stock"><i class="material-icons">&#xE148;</i></a></td>
</thead>

Я хочу выбрать опцию «Выбрать размер», а затем «S».Я попробовал этот код.

from selenium import webdriver
from selenium.webdriver.support.select import Select

mySelect = Select(driver.find_element_by_id("sct-size"))
mySelect.select_by_visible_text("S")

Но получил ошибку

NoSuchElementException: Сообщение: не удалось найти элемент с видимым текстом: S

Iмногие решения этой проблемы уже рассматривались здесь на stackoverflow.Предполагается выбрать «S» из выпадающего меню, но не сделал.Я не знаю, что еще я могу попробовать.

Спасибо.

уже пробовал

  1. https://sqa.stackexchange.com/questions/12029/how-do-i-work-with-dropdowns-in-selenium-webdriver
  2. Выберите раскрывающийся список, используя Python + Selenium

Отредактировано 1

Я также пытался

mySelect = Select(driver.find_element_by_id("sct-size"))
mySelect.select_by_value("323")

, но получил эту ошибку

NoSuchElementException: Сообщение: невозможно найти параметр со значением: 323

Также я попытался изменить метод find_element с именем

obj = Select(driver.find_element_by_name('product_size'))
obj.select_by_index(1)

и получил ошибку

NoSuchElementException: Сообщение: невозможно найти параметр с индексом 1

Возможно, проблема в find_element?Я не знаю.

Отредактировано 2

Я устал играть с инструментом «осмотреть» в Google Chrome и обнаружил, что при загрузке страницы, HTML только загрузить 1 вариант (который вв этом случае его «Выберите размер»).Это объясняет причину ошибки.

html-код при загрузке страницы.

<thead>
<td style="width: 40%;">
    <select name="product_size" id="sct-size" data-md-selectize>
        <option value="-">Choose Size</option>                                                    
</td>
<td style="width: 40%;">
    <select name="product_color" id="sct-color" data-md-selectize>
        <option value="-">Choose Color</option>

                                            </select>
</td>
<td style="width: 19%;"><input type="text" class="md-input" name="product_stock_" id="inp-stock" placeholder="Stock" style="margin-top: -11px;text-align: center;"/></td>
<td style="width: 1%;"><a href="#" id="btn-addstock" style="margin-top: 5px; display: block;" title="Add Stock"><i class="material-icons">&#xE148;</i></a></td>
</thead>

Пробовал решение Seema Nair, но получил другую ошибку

AttributeError: 'Select'объект не имеет атрибута 'click'

мой новый код

mySelect = Select(driver.find_element_by_id("sct-size")) 
mySelect.click() 
mySelect.select_by_visible_text("S")

Итак, новый вопрос, как я могу щелкнуть раскрывающийся список, чтобы раскрыть код опции?

1 Ответ

0 голосов
/ 31 января 2019

Ваш оригинальный код, выбранный видимым текстом или значением, будет работать.

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

Поэтому добавьтещелкните метод до выбора, и тот же код, который был у вас изначально, будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...