import sys
import os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../..')))
from selenium import web driver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support.ui import WebDriverWait
class WebDriver():
def setup(self):
self.driver = WebDriver()
self.driver = webdriver.Firefox()
self.base_url = "www.google.com"
self.driver.get(self.base_url)
self.driver.delete_all_cookies()
self.driver.implicitly_wait(30)
self.verificationErrors = []
self.accept_next_alert = True
self.driver.maximize_window()
def teardown(self):
self.driver.quit()
我想在我的自动化框架中使用它作为我的基本文件,但它似乎不起作用。请帮忙!
此外,了解缩进,而不是此处遇到的问题。 我希望能够导入它并让它运行设置并拆除我添加到框架的每个脚本。
理解如何构建框架的任何帮助都将非常感激!感谢
答案 0 :(得分:1)
您正在考虑使用哪种测试框架?这将彻底改变您在测试之前/之后(或整个测试套件)运行此逻辑所使用的语法。
其他注意事项:
您正在进行哪种类型的测试?
如果您将Selenium视为对Web应用程序UI进行单元测试的一种方式,那么您可能需要查看一些JavaScript测试框架。如果您在UI中使用任何 JavaScript,请务必检查JavaScript框架。使用JavaScript来操纵DOM,并尝试使用Selenium来操纵DOM是DOM的一个巨大竞争条件。
您打算使用Selenium进行测试?
我强烈建议您使用Selenium验证您的网络应用中的快乐路径(即我可以点击此按钮),并不测试您的业务规则;锤击API以执行这些业务规则。 API比UI更不可能发生变化,并且对UI的更改会导致Selenium测试中的误报(生成失败的测试中断,而不是应用中的真正的失败)。 / p>
请不要因此而气馁!你正在编写测试真是太棒了!
如果使用正确,Selenium是一个很好的工具,它很容易超载它并最终导致不一致的测试(取决于JS的数量和JS框架)。
专门针对您的代码的指针:
使类可以实例化并根据需要进行绑定 - 使得跨框架的代码更容易使用,调试更容易b / c你可以打开python解释器并使用它。
# file named my_webdriver.py
import sys
import os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../..')))
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support.ui import WebDriverWait
class MyDriver():
def __init__(self):
self.driver = webdriver.Firefox()
self.base_url = "www.google.com"
self.driver.implicitly_wait(30)
#self.verificationErrors = [] # delete this line, and deal with errors in the framework
self.accept_next_alert = True
self.driver.maximize_window()
self.reset()
def reset(self):
"""So I can be lazy and reset to a know starting point before each test case"""
self.driver.get(self.base_url)
self.driver.delete_all_cookies()
def teardown(self):
self.driver.quit()
使用它:
from my_webdriver import MyDriver
driver = MyDriver()
driver.get('http://my-awesome-app.org')
element = driver.find_element_by_id('some-id')
element.click()
将其绑定在unittest框架中:
import unittest
from my_webdriver import MyDriver
class AwesomeTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
"""Runs once per suite"""
cls.driver = MyDriver()
def setUp(self):
"""Runs before each test case"""
self.driver.reset()
@classmethod
def tearDownClass(cls):
cls.driver.teardown()
def test_stuff(self):
"""a test case!"""
# stuff
pass
祝你好运!希望这有用/有用。
*我在PyCon上看到了一些关于使用Python来操作DOM的东西,但我认为没有人在生产中这样做。