Selenium webdriver: перечислите все элементы выпадающего списка и выберите другой элемент - PullRequest
2 голосов
/ 18 мая 2019

С помощью Python3 Selenium ChromeDriver по этому URL:

https://www2.sgx.com/derivatives/products/chinaa50

  1. Как получить список месяцев контрактов.Из Chrome F12, похоже, это соответствующий HTML.

    <sgx-input-select class="sgx-input" name="" label="" hint="" message=""
        placeholder="">
        <span class="sgx-input-hint-icon" style="visibility: hidden;"></span>
        <span class="sgx-input-hint"></span>
        <label class="sgx-input-select-label">
            <span
                class="sgx-input-label" style="display: none;"></span><span
                class="sgx-input-select-filter-wrapper"><input
                is="sgx-select-filter" type="text"
                class="sgx-input-control sgx-input-select-filter" name=""
                placeholder="" readonly="">
                <span
                    class="sgx-select-filter-icon" title=""></span>
            </span>
        </label>
        <div class="sgx-input-message" style="display: none;"></div>
        <sgx-select-model style="display: none;"></sgx-select-model>
    </sgx-input-select>
    
  2. Как выбрать другой элемент из списка, что приводит к перезагрузке виджетов смежных областей?

XPathвыпадающий список выглядит так:

//*[@id="page-container"]/template-base/div/div/section[1]/div/sgx-widgets-wrapper/widget-derivatives-prices-and-chart/div[1]/div/div[2]/sgx-input-select

Есть ли лучший XPath для обозначения этого?

1 Ответ

0 голосов
/ 20 мая 2019

Более читаемый Xpath для выпадающего списка Contract Month будет

//div[text()='Contract Month']//following-sibling::sgx-input-select//input

Селектор CSS для выпадающего списка Contract Month options

.sgx-select-picker-list .sgx-select-picker-option label .sgx-select-picker-label

Вы дали щелкнуть раскрывающийся список «Месяц контакта», а затем нашли options, используя вышеуказанные идентификаторы. Тогда вы можете инициировать щелчок на опции

код псевдо:

# Adding implicit wait 
driver.implicitly_wait(10)  

# Page has ajax loading where the dropdown loads slowly
# Adding sleep now. This has to be handled by webdriver wait
time.sleep(10)
dropdown = driver.find_element_by_xpath("//div[text()='Contract Month']//following-sibling::sgx-input-select//input")
# On clicking the dropdown, the options loads 
dropdown.click();
options = driver.find_elements_by_css_selector(".sgx-select-picker-list .sgx-select-picker-option label .sgx-select-picker-label")

optionSize = len(options);

for index in range(optionSize - 1):
    dropdown.click();
    # Find the options again as click on Month will reset the options
    options =  driver.find_elements_by_css_selector(".sgx-select-picker-list .sgx-select-picker-option label .sgx-select-picker-label")
    options.index(index).click()

    # Page has ajax loading where the dropdown loads slowly
    # Adding sleep now. This has to be handled by webdriver wait
    time.sleep(10)   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...