gpt4 book ai didi

java - Python Selenium - 一个 session 浏览器

转载 作者:行者123 更新时间:2023-12-02 11:34:26 25 4
gpt4 key购买 nike

我有一个具有六个功能的应用程序。他们每个人都从登录网站开始。我创建了另一个名为登录的类(在代码下方)。该项目的结构是6个类和主类。在这六个类中如何使用这个函数呢?这是我在每个类和登录类中登录的代码

class ClassName1(unittest.TestCase):
WebDriver driver=new FirefoxDriver();
driver.get("URL");
login=driver.find_element_by_name('Login')
password=driver.find_element_by_name('Password')
username.send_keys("login")
password.send_keys("password")
driver.find_element_by_name("submit").click()

我创建了登录类:

class Login(unittest.TestCase)
def log(self):
WebDriver driver=new FirefoxDriver();
driver.get("URL");
login=driver.find_element_by_name('Login')
password=driver.find_element_by_name('Password')
username.send_keys("login")
password.send_keys("password")
selenium.find_element_by_name("submit").click()

我的建议是:

从文件导入登录 -> 到 ClassName1 并在类中: Login.log() 但我不知道如何使用它我有两个 session 浏览器,但出现错误,我不知道如何将其合并为一个 session

在我制作的每个类中,我的应用程序中的第二个问题 - webdriver,我可以在浏览器 session 中测试我的六个类吗?每个类(class)都打开浏览器。我想要这个合二为一。这是可能的 ?第二个问题在我制作的每个类中的应用程序中 - webdriver,我可以在一个浏览器 session 中测试我的六个类吗?这是可能的 ?我应该如何更改我的代码?谢谢!

最佳答案

您的问题与 Selenium 无关;您的问题是关于跨测试共享测试数据。 (测试数据恰好是 Selenium 驱动程序。)

unittest ,可以通过两种方式之一完成设置。

1。为每个测试设置数据

如果您向测试用例添加 setUp() 实例方法,unittest 将在每次测试之前调用它。 (类似地,如果您向测试用例添加 tearDown() 实例方法,unittest 将在每次测试后调用它。)

因为它是一个实例方法,所以您可以访问测试实例(即 self)。在此方法中设置的数据可以分配给实例上的各种属性,以便稍后在实际测试功能中使用。

您可以使用此函数在每次测试之前设置驱动程序(并在测试后将其拆除):

class MyTestCase(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.get("http://www.example.com")
self.driver.find_element_by_link_text("Log in").click()
# ...

def tearDown(self):
self.driver.quit()

def test_creating_a_widget(self):
self.driver.find_element_by_link_text("New widget").click()
# ...

def test_creating_a_whatsit(self):
self.driver.find_element_by_link_text("New whatsit").click()
# ...

重要的是,这仍然会为每个测试创建一个新的驱动程序( session )。但是...

2。为所有测试设置数据

如果您将 setUpClass() 类方法添加到测试用例中,unittest 将在测试用例中的所有测试运行之前调用它一次(且仅一次) 。 (类似地,如果您向测试用例添加 tearDownClass() 类方法,unittest 将调用它一次(且仅一次)之后运行测试用例中的测试。)

因为它是一个类方法,所以您可以访问测试类(即cls)。在此方法中设置的数据可以分配给类上的各种属性,以便稍后在实际测试功能中使用。

class MyTestCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Firefox()

@classmethod
def tearDownClass(cls):
cls.driver.quit()

但是等等!

如果您在测试之间共享驱动程序,每个测试都会从上一个测试停止的地方继续。换句话说,您的测试不会被隔离,这会使编写和调试测试变得更加困难。

为了解决这个问题,我们需要在每次测试之间进行重置。为此,我们可以回到 setUp()tearDown() 实例方法:

class MyTestCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Firefox()

def setUp(self):
self.driver.get("http://www.example.com")
self.driver.find_element_by_link_text("Log in").click()
# ...

def tearDown(self):
self.driver.get("about:blank")

@classmethod
def tearDownClass(cls):
cls.driver.quit()

def test_creating_a_widget(self):
self.driver.find_element_by_link_text("New widget").click()
# ...

def test_creating_a_whatsit(self):
self.driver.find_element_by_link_text("New whatsit").click()
# ...

尾声:跨测试共享设置

要在测试用例之间共享此行为,只需使用继承:

class BaseTestCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Firefox()

def setUp(self):
self.driver.get("http://www.example.com")
self.driver.find_element_by_link_text("Log in").click()
# ...

def tearDown(self):
self.driver.get("about:blank")

@classmethod
def tearDownClass(cls):
cls.driver.quit()

class WidgetsTestCase(BaseTestCase):
def test_creating_a_widget(self):
self.driver.find_element_by_link_text("New widget").click()
# ...

class WhatsitsTestCase(BaseTestCase):
def test_creating_a_whatsit(self):
self.driver.find_element_by_link_text("New whatsit").click()
# ...

奖励:使用 capybara

对于使用 Selenium 的测试,capybara-py可能更好。它在 Selenium 之上提供了一个层,并负责处理大部分事务以及更多事务,例如,透明地等待异步行为:

import capybara
import capybara.dsl
import unittest

class BaseTestCase(unittest.TestCase):
def setUp(self):
self.page = capybara.dsl.page
self.page.visit("http://www.example.com")
self.page.click_link("Log in")
# ...

def tearDown(self):
capybara.reset_sessions()

class WidgetsTestCase(BaseTestCase):
def test_creating_a_widget(self):
self.page.click_link("New widget")
# ...

class WhatsitsTestCase(BaseTestCase):
def test_creating_a_whatsit(self):
self.page.click_link("New whatsit")
# ...

关于java - Python Selenium - 一个 session 浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49057075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com