我有一个Django项目,我将在其中开始编写Selenium测试。第一个看起来像这样:
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from core.models import User
from example import settings
BACH_EMAIL = "johann.sebastian.bach@classics.com"
PASSWORD = "password"
class TestImportCRMData(StaticLiveServerTestCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.webdriver = webdriver.Chrome()
cls.webdriver.implicitly_wait(10)
@classmethod
def tearDownClass(cls):
cls.webdriver.close()
cls.webdriver.quit()
super().tearDownClass()
def setUp(self):
self.admin = User.objects.create_superuser(email=BACH_EMAIL, password=PASSWORD)
def test_admin_tool(self):
self.webdriver.get(f"http://{settings.ADMIN_HOST}:{self.server_thread.port}/admin")
self.webdriver.find_element_by_id("id_username").send_keys(BACH_EMAIL)
self.webdriver.find_element_by_id("id_password").send_keys(PASSWORD)
self.webdriver.find_element_by_id("id_password").send_keys(Keys.RETURN)
self.webdriver.find_element_by_link_text("Users").click()
Run Code Online (Sandbox Code Playgroud)
当我运行它时,测试通过但仍然以以下错误结束:
Traceback (most recent call last):
File "C:\Users\pupeno\Documents\Eligible\code\example\venv\lib\site-packages\django\db\backends\utils.py", line 83, in _execute
return self.cursor.execute(sql)
psycopg2.OperationalError: database "test_example" is being accessed by other users
DETAIL: …Run Code Online (Sandbox Code Playgroud) python django selenium selenium-webdriver liveservertestcase
我time在我的脚本中使用库:
import time
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
它可以让我的 Selenium WebDriver 休眠一秒钟,但 250 毫秒怎么可能呢?
我是初学者。我理解等待的基本作用,但我对互联网上不同的教程如何放置和解释它感到困惑。例如,在下面的代码中,它被放置在加载 URL 之前。那么,是否只是等待 URL 加载或查找元素或两者兼而有之?如果我在 try 块中使用隐式等待一次,它是否适用于我在代码中执行的每个元素搜索?
from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(10) # seconds
driver.get("http://somedomain/url_that_delays_loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")
Run Code Online (Sandbox Code Playgroud) selenium selenium-chromedriver selenium-webdriver geckodriver implicitwait
Selenium 隐式等待总是占用整个等待时间还是可以更快完成?如果我将隐式等待设置为 10 秒,对 .findElement 的调用可以在几秒钟内完成还是总是需要整个 10 秒?
此页面暗示它等待整整 10 秒,这非常令人困惑,因为它不是 javadoc 所暗示的。
来自 WebDriver.java 的以下代码注释意味着它可以比隐式超时定义的更早完成的轮询操作。但是,评论中的最后一句话确实打破了这种信念,让我对此并不完全确定。如果它实际上是轮询,那么它将如何“对测试时间产生不利影响”,因为它不会在整个隐式等待持续时间内完成?
/**
* from WebDriver.java
* Specifies the amount of time the driver should wait when searching for an element if
* it is not immediately present.
* <p/>
* When searching for a single element, the driver should poll the page until the
* element has been found, or this timeout expires before throwing a
* {@link NoSuchElementException}. When searching for …Run Code Online (Sandbox Code Playgroud)