Я использую XPATH в selenium на python и понимаю проблему selenium.common.exceptions.JavascriptException: Сообщение: Циклическое значение объекта

Во-первых, я новичок в Selenium в Python. Я работаю над сайтом на Django Framework. Я хочу сделать модульные тесты, чтобы сделать проект сайта более качественным.

Ошибка

selenium.common.exceptions.JavascriptException: Сообщение: Циклическое значение объекта

Введение

. Я делаю свой тест в tests_functionals.py, который является файлом, содержащим selenium. Я использую XPATH для получения элементов в DOM.

В index.html сайта у меня есть эти ссылки :

<ul class="navbar-nav">
    <li class="nav-item active">
        <a class="nav-link" href="/home">Home</a>
    </li>
    <li class="nav-item">
        <a class="nav-link" href="/about">About</a>
    </li>
    <li class="nav-item">
        <a class="nav-link" href="/corpora">Corpora</a>
    </li>
    <li class="nav-item">
        <a class="nav-link" href="/approaches">Approaches</a>
    </li>    
    <li class="nav-item">
        <a class="nav-link" href="/ML">Machine Learning</a>
    </li>
</ul>

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

Здесь, если вы хотите узнать больше о BaseX

Я использую этот путь: //header/nav/div/ul/li/a/@href

А на BaseX у меня такой результат:

href="/home"
href="/about"
href="/corpora"
href="/approaches"
href="/ML"

Моя проблема в Django

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

from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.common.exceptions import NoSuchElementException
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from sys import platform # Check the OS of the computer 
from os.path import join, dirname

import time

server_used = "localhost:8000/"

class testProject(StaticLiveServerTestCase):

    def hasBeenFound(self, xpath) -> bool:
        try:
            self.browser.find_element_by_xpath(xpath=xpath)
        except NoSuchElementException:
            return False
        return True
    
    def setUp(self) -> None:

        if platform.startswith("win32"):
            # In Windows 10
            binary = FirefoxBinary(r'C:\Program Files\Mozilla Firefox\firefox.exe')
            self.browser = webdriver.Firefox(firefox_binary=binary, executable_path=join(dirname(__file__),'geckodriver.exe'))
        else:
            # In linux
            self.browser = webdriver.Firefox()

        
    def tearDown(self) -> None:
        self.browser.close()

    
    def test_nav_in_header(self):
        # I connect myself into the server
        self.browser.get(server_used)
        
        # Just the beginning of the code
        h1_ontology = self.browser.find_element_by_id("what-is-ontology")
        # It test it the <h1>What is ontology ?</h1> exists and have this value for the text
        # self.assertTrue(self.hasBeenFound(""))
        self.assertEquals(
            h1_ontology.find_element_by_tag_name("span").text,
            "What is ontology ?",
        )
        
        
        toto = self.browser.find_elements_by_xpath("//header/nav/div/ul/li/a/@href")
        for to in toto:
            print(to)

Когда я хочу напечатать toto у меня возникает эта ошибка :

Traceback (most recent call last):
  File "/home/adam/Documents/OntologyLearningPlatform/OLApp/tests/tests_functionals.py", line 52, in test_nav_in_header
    toto = self.browser.find_elements_by_xpath("//header/nav/div/ul/li/a/@href")
  File "/home/adam/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 410, in find_elements_by_xpath
    return self.find_elements(by=By.XPATH, value=xpath)
  File "/home/adam/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 1005, in find_elements
    return self.execute(Command.FIND_ELEMENTS, {
  File "/home/adam/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/home/adam/.local/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.JavascriptException: Message: Cyclic object value

Можете простить меня за мой уровень английского.

Простите, но на самом деле вопрос такой:

Я использую XPATH в selenium на python и НЕ ПОНИМАЮ проблему selenium.common.exceptions.JavascriptException: Сообщение: Циклическое значение объекта

Я не знаю, как изменить вопрос. Мне очень жаль.

PS:

Я не понимаю, почему кто-то удалил этот ответ. Но это очень важно, потому что если люди думают, что у меня есть решение, они могут потратить свое время зря.

Вернуться на верх