Wpis z mikrobloga

Mam pewien problem z Webdriverem - użycie page.click() przeładowuje stronę, co sprawia, że selenium wyrzuca StaleElementReferenceException.

I ja dokładnie wiem, że to dlatego, że traci referencję do obiektu page, tylko, że w moim kodzie ten exception nie ma większego znaczenia, bo po 'page.click()' nie ma już żadnych operacji na obiekcie o nazwie page.

I jak wyciszę ten exception tak jak na zdjęciu, to wszystko działa w porządku, tylko mam z tym taki problem, że to nie wygląda na eleganckie rozwiązanie. Da się to zrobić jakoś inaczej?

Myślałem nad czymś w stylu 'odrejestrowania' obiektu, tak żeby webdriver wiedział, że dany obiekt nie będzie używany w przyszłości, ale nie mogę znaleźć nigdzie info, czy tak się da. Nie mam innych pomysłów jak to ładniej ominąć. Ktoś wie jak się powinno obchodzić z taką sytuacją? Bo z selenium mam do czynienia od niedawna.

#programowanie #python #qa #selenium #testowanieoprogramowania
Wrathofthe_Tyrant - Mam pewien problem z Webdriverem - użycie page.click() przeładowu...

źródło: comment_wHN2ZAnAy02AE8VO9aNoEmW2ovMzMLPQ.jpg

Pobierz
  • 5
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Wrath_of_the_Tyrant: Nie znam się na selenium, ale czy ten wyjątek nie jest czasem dlatego, że dalej iterujesz po elementach paginacji, które już przestały istnieć? Spróbuj dać break zaraz po .click() (jeszcze w ifie).

edit: swoją drogą, nie ma jakichś funkcji do wybierania elementu z zadanym tekstem? Wtedy w ogóle nie musiałbyś iterować.
edit2: jest XPath, więc można go wykorzystać :) https://stackoverflow.com/questions/12323403/how-do-i-find-an-element-that-contains-specific-text-in-selenium-webdriver-pyth
  • Odpowiedz
@m_bielawski: Problem nie jest w lokalizowaniu elementów. Niemniej naprowadziłeś mnie na rozwiązanie. Zapomniałem, że paginator wygląda tak:

Prev, 1, 2, 3, Next

Przez co będąc na stronie pierwszej i chcąc pójść na drugą, to druga strona kryje się równocześnie pod przyciskiem '2' oraz pod
  • Odpowiedz
@m_bielawski: No właśnie chyba iterować niby można nawet po odczepieniu, ale jakakolwiek próba operacji na elemencie rzuci ten exception.

Bo w moim przypadku to było tak, że po pierwszym użyciu 'page.click()' strona była odświeżana. W tle szła wtedy jedna iteracja przez link, który prowadził do trzeciej podstrony (ale nie był klikany, bo nie spełniał warunku) oraz kolejna iteracja, która napotykała link o nazwie 'Next'. Wtedy kliknięcie na 'Next' było już
  • Odpowiedz