python - Python Selenium 定义自定义 TimeoutException
问题描述
我有一个 pytest 脚本,它有多个类,每个类都有一组测试。目前,每个类中的每个测试都定义了相同的 TimeoutException。例如,
class Test1:
def test_1:
try:
"do something"
except TimeoutException:
"handle exception"
def test_2:
try:
"do something"
except TimeoutException:
"handle exception"
class Test2:
def test_3:
try:
"do something"
except TimeoutException:
"handle exception"
“处理异常”部分是我为每个模块提供相同代码的地方。我想知道是否有更蟒蛇的方式来做到这一点。在我的 TimeoutException 处理程序的每个模块中粘贴相同的行似乎很草率。
任何帮助表示赞赏,如果需要更多信息,请告诉我。
提前致谢!
解决方案
也许尝试为您要处理的功能添加一些显式等待。当每个测试都有单独的逻辑时,显式等待专门用于测试用例。我想您的问题与硒有关,因为我看到您标记了您的问题。您可以在每个测试中为您想要等待的每个元素定义它。
要实现这种显式等待,您可以使用为 WebDrivers 设计的最流行的工具:WebdriverWait。您可以设置超时持续时间和需要引发 TimeoutException 时定义的条件。
以下是 Selenium 官方网站的示例:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
finally:
driver.quit()
我根据您的代码稍微修改了这个案例,这是一个自定义 TimeoutException 的示例(以最简单的方式忽略页面对象模型):
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
class Test1:
def test_1:
try:
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "myDynamicElement")))
except TimeoutException:
"handle exception"
另一个非常棒的等待是隐式等待,它为 Selenium 完成的所有操作设置整体超时,如下所示:
driver.implicitly_wait(10)
这意味着,webdriver 将等待一个 Webelement 十秒钟,然后将引发 TimeoutException。但是,这种等待应该被视为全局的、与大小写无关的等待。
我希望这个答案有帮助。
在这里你有一个文档如何做到这一点: https ://selenium-python.readthedocs.io/waits.html
推荐阅读
- javascript - 在 Safari 中同时使用书写模式和文本溢出时的兼容性
- c# - 为什么我无法使用 HttpWebRequest 获取请求?
- tfs - 将 TFS 2017 克隆到新硬件
- java - JAXB 元素的属性
- php - PHP - 包括一个放在类变量中的类
- sparql - SPARQL Wikidata 查询服务中变量字符串的精确匹配
- javascript - 将 ISO-8859-1 编码字节转换为 UTF-8
- java - Kafka SinkRecord 到 Avro 对象
- android - payfort sdk_token 生成上的签名不匹配错误
- java - 我必须编写一个程序来收集高度和序列号并输出 maxq min