【发布时间】:2022-01-20 09:05:14
【问题描述】:
我有一个 Django 应用程序,我想通过 pytest 和 Selenium 进行测试。
我试图通过的例程是让 Selenium 登录,然后转到菜单,选择其中一个选项。这将重定向到一个新页面,该页面很好。在那里,我让 selenium 输入数据并单击按钮开始提交。这也有效,并重定向到第三页。
在这第三个“您的提交已成功创建”页面上,显示了一个链接,用户可以单击以收集其提交的结果(此页面。此链接显示正确,href URL 很好。但是当我让Selenium点一下,突然得到一个Server Error 500:
<html lang="en"><head>
<title>Server Error (500)</title>
</head>
<body>
<h1>Server Error (500)</h1><p></p>
</body></html>
当我手动执行完全相同的操作时,它工作正常。
这是我的测试代码(略微简化):
@pytest.fixture(scope="class")
def chrome_driver_init(request):
options = webdriver.ChromeOptions()
options.headless = True
options.binary_location = CHROME_BIN_PATH
driver = webdriver.Chrome(service=CHROME_SERVICE, options=options)
request.cls.driver = driver
yield
driver.quit()
@pytest.mark.django_db
@pytest.mark.usefixtures("chrome_driver_init")
class SubmissionTest(LiveServerTestCase):
def test_adding_submission(self):
self.driver.get(self.live_server_url)
username = TEST_USER
pwd = TEST_USER_PWD
User = get_user_model()
user = User.objects.create_user(username=username, password=pwd)
user.save()
# click 'Login':
self.driver.find_element(By.LINK_TEXT, "Login").click()
# now on Login page, log in via Selenium:
username_field = self.driver.find_element(By.NAME, "username")
pwd_field = self.driver.find_element(By.NAME, "password")
submit_btn = self.driver.find_element(By.ID, "form_field")
username_field.send_keys(TEST_USER)
pwd_field.send_keys(TEST_USER_PWD)
submit_btn.click()
# now logged in, go to desired menu point:
self.driver.find_element(By.LINK_TEXT, "MenuPoint 1").click()
assert self.driver.title == "MenuPoint 1" # redirection works fine
## find various fields, enter stuff, click "submit"
# check successfull:
assert self.driver.title == "Added Submission" # redirection works, as expected
## more checks => yes, this is the desired page
# find link for result page:
result_link = self.driver.find_element(By.LINK_TEXT, "click here for your results")
result_link_url = result_link.get_attribute("href")
print(result_link_url) # this is indeed the correct URL
# click link:
time.sleep(10) # wait 10 seconds => more did not help, either
result_link.click()
## now we get the Server Error :-(
print(self.driver.page_source)
我已经尝试使用WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, "click here for your results"))).click(),但似乎连点击都没有。
我知道错误 500 的意思是错误在服务器端。但是在点击之前,服务器是好的。此步骤之前的所有重定向都可以正常工作。网址也签出。手动,一切都按预期工作。我不知道如何进一步缩小问题范围。
我该如何调查此错误的原因并希望能够修复它?
【问题讨论】:
标签: python django selenium pytest