我对python和selenium测试都是新手,我遇到了一个可能有标准解决方案的问题,但我找不到它。
假设我正在做的项目是支持Google Chrome和Firefox。为每个受支持的浏览器编写单独的测试似乎是多余的,所以我一直在尝试编写通用测试方法,这些方法将使用不同的Web驱动程序单独执行。文章源自玩技e族-https://www.playezu.com/179397.html
我目前的做法如下文章源自玩技e族-https://www.playezu.com/179397.html
from selenium import webdriver
def construct_chrome_webdriver () :
driver = webdriver.Chrome()
driver.implicitly_wait(10)
return driver
def construct_firefox_webdriver () :
driver = webdriver.Firefox()
driver.implicitly_wait(10)
return driver
def actual_test_method_implementation (construct_webdriver) :
webdriver = construct_webdriver()
webdriver.get('http://localhost:3333')
# do some testing
def test_method_that_is_executed_by_pytest () :
actual_test_method_implementation(construct_chrome_webdriver)
actual_test_method_implementation(construct_firefox_webdriver)
使用命令执行测试 Pytest文件名。PY公司
文章源自玩技e族-https://www.playezu.com/179397.html
这种方法需要大量的样板文件——每个测试有两种方法。有没有更好的方法来实现这一点?文章源自玩技e族-https://www.playezu.com/179397.html 文章源自玩技e族-https://www.playezu.com/179397.html
未知地区 2F
好吧,我已经找到了一个更好的解决方案,但我仍然不确定这是否是最好的选择,所以我在几天内不会将这个答案标记为可接受的答案。
conftest。p
import pytest
def pytest_addoption (parser):
parser.addoption("–Web驱动程序", action="store", default="chrome", help="chrome | firefox")
@pytest.fixture
def Web驱动程序u名称 (request) :
return request.config.getoption(‘–Web驱动程序’)
测试用例。PY公司
from selenium import Web驱动程序
def 构造Web驱动程序 (Web驱动程序u名称) :
if Web驱动程序u名称 == ‘firefox’ :
driver = Web驱动程序.Firefox()
else :
driver = Web驱动程序.Chrome() # chrome is also the default choice
# further Web驱动程序 initialization
driver.implicitly_wait(10)
driver.get(‘http://localhost:3333’)
return driver
test_文件。py公司
from test_utils import 构造Web驱动程序
def test_method_that_is_executed_by_pytest (Web驱动程序u名称) :
print(‘Web驱动程序u名称 = ‘ + Web驱动程序u名称)
Web驱动程序 = 构造Web驱动程序(Web驱动程序u名称)
# do some testing
测试调用
pytest filename.py –Web驱动程序=chrome
pytest filename.py –Web驱动程序=firefox
解释
conftest文件。py和固定装置
TLD的R;
在里面 conftest。p 我定义了一个测试参数,名为 Web驱动程序 这是在从命令行调用测试时设置的。
已调用夹具 Web驱动程序u名称 将注入pytest管理的每个测试方法。
构造Web驱动程序 函数将根据 Web驱动程序u名称 是
赞成的意见
不需要太多样板代码-每个测试只需要一种方法
欺骗
这仍然不是一种标准化的做事方式,我觉得我在重新发明轮子。
未知地区 1F
为了简化调用,可以像这样直接调用驱动程序:(使用getattr)
from selenium imp或t webdriver
driver = getattr(webdriver, "Firefox")(options=youroptions, executable_path="pathgeckodriver.exe" )
或
driver = getattr(webdriver, "Chrome")(options=options, executable_path="pathchromedriver.exe" )
getattr(webdriver, "Chrome")(options=options, executable_path="pathchromedriver.exe" )
相当于
webdriver.Chrome(options=options, executable_path="pathchromedriver.exe" )
f或 nav in ["Chrome", "Firefox"]:
driver = getattr(webdriver, nav)
driver.implicitly_wait(10)
driver.get(‘http://localhost:3333’)