建立selenium / python框架的建议?

时间:2016-03-23 05:17:19

标签: python selenium selenium-webdriver automation automated-tests

    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()

我想在我的自动化框架中使用它作为我的基本文件,但它似乎不起作用。请帮忙!

此外,了解缩进,而不是此处遇到的问题。 我希望能够导入它并让它运行设置并拆除我添加到框架的每个脚本。

理解如何构建框架的任何帮助都将非常感激!感谢

1 个答案:

答案 0 :(得分:1)

您正在考虑使用哪种测试框架?这将彻底改变您在测试之前/之后(或整个测试套件)运行此逻辑所使用的语法。

其他注意事项:

您正在进行哪种类型的测试?

  • "单元测试"? (b / c你可以在网页的python中进行单元测试)
  • 集成测试
  • 压力/性能测试?

如果您将Selenium视为对Web应用程序UI进行单元测试的一种方式,那么您可能需要查看一些JavaScript测试框架。如果您在UI中使用任何 JavaScript,请务必检查JavaScript框架。使用JavaScript来操纵DOM,并尝试使用Selenium来操纵DOM是DOM的一个巨大竞争条件。

您打算使用Selenium进行测试?

  • 完整性检查您的UI按钮是否正确连接?
  • 您的网络应用的业务规则?

我强烈建议您使用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的东西,但我认为没有人在生产中这样做。