Селен WebDriver - NoSuchElementExceptions

Я выкарыстоўваю бібліятэку модульнага тэставання пітона (UnitTest) з селенам WebDriver. Я спрабую знайсці элемент па яго імені. Каля паловы часу, тэсты кінуць NoSuchElementException, а другі раз ён не кідае выключэнне.

Мне было цікава, калі гэта было звязана з селенам WebDriver ня чакае досыць доўга, старонка загрузкі.

4

7 адказы

driver = webdriver.WhatEverBrowser()
driver.implicitly_wait(60) # This line will cause it to search for 60 seconds

неабходна толькі ўставіць у код адзін раз (я звычайна раблю гэта адразу пасля стварэння аб'екта WebDriver)

напрыклад, калі ваша старонка па нейкай прычыне патрабуецца 30 секунд, каб загрузіць (купіць новы сервер), а элемент з'яўляецца адным з апошніх рэчаў, каб паказаць на старонцы, гэта ў значнай ступені проста працягвае правяраць зноў і зноў і зноў, калі элемент там на працягу 60 секунд, а затым, калі яно не знайсці яго, ён выкідвае выключэнне.

Таксама пераканайцеся, што ваша сфера з'яўляецца правільнай, а менавіта: калі вы сфакусаваныя на раме, і элемент, які вы шукаеце не ў гэтым кадры, ён не будзе яго знайсці.

9
дададзена
<�Код> driver.get() з'яўляецца аперацыяй блакавання; убудовы WebDriver браўзэр не рэагуе на выклікалым кліент (прывязкі ў вашым мове па выбары), пакуль вадзіцель не вызначыў, што старонка была загружана цалкам, у асноўным, калі ўсе GETs вярнуліся і DOM завершана. Аднак, калі ў вас ёсць асінхронны кантэнт (JS, які змяняе DOM пасля першапачатковай загрузкі старонкі завершана, і г.д.), вам, верагодна, трэба чакаць на элемент, так як ён не будзе ў зыходным завершана DOM. Настройка глабальнага няяўна чакання хутка выправіць, але гэта можа мець негатыўныя наступствы, калі тэст падчас выканання для вас важна.
дададзена аўтар Silas Ray, крыніца
вельмі выдатна, я ніколі не ведаў, што вы маглі б зрабіць гэта, таксама добры пункт аб кадрах, што спатыкнуўся мяне перад
дададзена аўтар qwwqwwq, крыніца
ён літаральна спатыкнуўся кожны карыстальнік webriver калі-небудзь у гісторыі селену. Я меў звычай пісаць цэлыя DEFS як @ адказ Akkabar для гэтага, а потым наткнуўся на яго адзін дзень, як «нічога сабе гэтыя хлопцы ўжо думалі пра тое, што"
дададзена аўтар TehTris, крыніца
я згодны @ sr2222, асабліва калі вы карыстаецеся паспрабаваць заяву.
дададзена аўтар TehTris, крыніца

Я бачу, што таксама. Што я магу зрабіць, гэта проста чакаць яго ...

Вы можаце паспрабаваць:

while True:
    try:
        x = driver.find_by_name('some_name')
        break
    except NoSuchElementException:
        time.sleep(1)
        # possibly use driver.get() again if needed

Also, try updating your selenium to the newest version with pip install --update selenium

5
дададзена

Я паклаў грошы на кадр, як у мяне была аналагічная праблема, перш чым :)

Праверце HTML і праверце, калі вы маеце справу з рамкай. Калі затым пераход выправіць кадр будзе ў стане знайсці элемент.

пітон

driver.switch_to_frame("frameName")

Тады пошук элемента.

Калі няма, паспрабуйце змясціць час чакання, як іншыя прапанавалі.

3
дададзена

Адным са спосабаў апрацоўкі чакае элемента, каб з'явіцца як гэта:

import selenium.webdriver.support.ui as ui
wait = ui.WebDriverWait(driver,10)
wait.until(lambda driver: driver.find_by_name('some_name') )
elem = driver.find_by_name('some_name')

Вы правільна, што WebDriver не чакаючы загрузкі старонкі, няма ўбудаванага чакання па змаўчанні для driver.get() .

1
дададзена

Вы павінны мець waitUntil (ваш элемент нагрузкі). Калі вы ўпэўненыя, што ваш элемент у канчатковым выніку з'явіцца на старонцы, гэта будзе гарантаваць, што калі-небудзь валідацыю будзе адбывацца толькі пасля таго, як будзе загружаны ваш чаканы элемент.

0
дададзена

Я адчуваю гэта можа быць праблемай сінхранізацыі (г.зн. хуткасць WebDriver і прымяненне хуткасць неадпаведнасць)

Выкарыстоўвайце невідавочнае чаканне:

driver.manage.timeouts.implicitlyWait(9000  TIMEUNITS.miliseconds)

спасылка

0
дададзена

To resolve this query you have to define explicit wait. so that till the time when page is loading it will not search any WebElement. below url help on this. http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp

0
дададзена