Я использую 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:
Я не понимаю, почему кто-то удалил этот ответ. Но это очень важно, потому что если люди думают, что у меня есть решение, они могут потратить свое время зря.