NoSuchElementException: Сообщение: не удалось найти элемент с индексом 1, выполняющий select_by_index в цикле через Selenium и Python - PullRequest
0 голосов
/ 11 октября 2018

Страница имеет следующее поле выбора,

<div class="select select-gender select-container">
  <select name="gender" class="my-dropdown 115px option" data-field="gender" data-type="dropdown">
    <option value="female">Woman</option>
    <option value="male">Man</option>
    <option value="">All</option> 
  </select>
</div>

Код Python

wait = WebDriverWait(driver, 100)
while True:
...
    # status off
    status_btn = wait.until(EC.element_to_be_clickable((By.NAME, "status")))
    if not(status_btn.is_selected()): # If checkbox is unticked
        status_btn.click() # to tick it

    # no photos
    photo_btn = driver.find_element_by_name("photo")
    if photo_btn.is_selected(): # If checkbox is ticked
        photo_btn.click() # to untick it

    #index gender
    # 0 woman
    # 1 man
    gen_select = Select(driver.find_element_by_name('gender'))
    print(gen_select)
    gen_select.select_by_index(1)

Она отлично работает для первых нескольких проходов через цикл, а затем выдает эту ошибку, печать показываетон получил элемент select, и объект "at" не является старым объектом, но он не может его выделить.

<selenium.webdriver.support.select.Select object at 0x000001B2DB740438>
<selenium.webdriver.support.select.Select object at 0x000001B2DCF189B0>
<selenium.webdriver.support.select.Select object at 0x000001B2DB753F98>
Traceback (most recent call last):
  File "LFmale2.py", line 94, in <module>
    gen_select.select_by_index(1)
  File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\support\select.py", line 103, in select_by_index
    raise NoSuchElementException("Could not locate element with index %d" % index)
selenium.common.exceptions.NoSuchElementException: Message: Could not locate element with index 1

1 Ответ

0 голосов
/ 11 октября 2018

Это сообщение об ошибке ...

selenium.common.exceptions.NoSuchElementException: Message: Could not locate element with index 1

... означает, что экземпляру WebDriver не удалось найти какой-либо элемент с индексом 1

. Я являюсьнемного удивлен тем фактом, что ...works fine for the first few passes though the loop... по следующим причинам:

select_by_index (index)

select_by_index(index) выбирает опцию по заданному индексу.Это делается путем проверки атрибута index элемента, а не просто путем подсчета.

Предоставленный вами HTML не отражает атрибут index.Поэтому в идеале должна быть следующая строка:

gen_select.select_by_index(1)

В первой итерации должно было возникнуть исключение.

Решение

Соответствующий HTML-код содержит visible_text для всех трех вариантов:

  • Woman
  • Man
  • All

В соответствии с передовой практикойВы должны использовать select_by_visible_text(text).

  • Кодовый блок:

    gen_select = Select(driver.find_element_by_name('gender'))
    print(gen_select)
    gen_select.select_by_visible_text("Man")
    
...