我是Python的新手,所以在这里请耐心等待.说,我有以下结构:
parentDir\
runTests.py
commonpageelements.py
testcases\
__init__.py
test1.py
test2.py
我想初始化webdriver并在runTests.py中打开页面,然后将参数传递给test1.py,test2.py等.对于此示例,我具有test1.py的登录测试.我还希望有一个包含常见页面元素的pageelements.py文件.我将在下面详细介绍python文件.
对于commonpageelements.py,我只是简单地定义了各种元素,例如username =“ inspected_name”.
我为runTests.py尝试了以下操作:
from selenium import webdriver
from testcases import *
import common_page_elements
import sys, unittest, re, time, os.path, logging
class RunTests(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(30)
self.driver.get("http://url_for_page")
def tearDown(self):
self.driver.quit()
self.assertEqual([], self.verificationErrors)
def test_loginlogout(username, password):
test_login_logout("myusername", "mypassword")
if __name__ == "__main__":
unittest.main()
然后,在test1.py中,我有:
class test1(username, password):
def test_login_logout():
driver = self.driver
driver.get(self.base_url)
driver.find_element_by_id(pageelements.textfield_username).clear()
driver.find_element_by_id(pageelements.textfield_username).send_keys(username)
driver.find_element_by_id(pageelements.textfield_password).clear()
driver.find_element_by_id(pageelements.textfield_password).send_keys(password)
driver.find_element_by_name(pageelements.button_submit).click()
driver.find_element_by_id(pageelements.link_logout).click()
我真的不确定如何实现这一目标.我有点盲目,试图进行调整,但是一无所获.任何帮助将不胜感激!谢谢
解决方法:
其他人将能够提供比我更多的价值,但是我注意到了几件事:
>如果__name__ ==’__main__’必须在最外面的范围内(否则它将保留在类内并且将不会执行).
>导入common_page_elements时,不会在run_tests.py中引用它.如果那是您定义用户名之类的地方,则需要在其前面显式引用common_page_elements.
>在test_loginlogout函数中,您要向它传递两个参数.我不是专家,但是我从未见过将self以外的变量传递给测试用例的情况.因此,即使您重组了代码以正确地从test1.py调用test_login_logout函数,也不会传递self(它将保存setUp的内容.因此这将无法工作.
>如果要从不同的模块运行测试,我相信每个模块都必须具有其测试用例,这意味着它们应该能够独立运行.在您的情况下,test1.py似乎没有运行所需的设置所需的报告所需的任何信息.
>考虑到以上几点,您可能需要使用unittest.TestLoader().loadTestsFromModule()函数,该函数可让您加载其他测试模块并执行它们.
这是完全未经测试的(我知道双关语很恐怖)代码,但是这种情况在您的情况下可能有效:
import logging, os.path, re, sys, time, unittest
from testcases import test1, test2
def main():
# Create a loader object
test_loader = unittest.TestLoader()
# Add your tests
suite = test_loader.loadTestsFromModule(test1)
suite.addTests(test_loader.loadTestsFromModule(test2))
# Run the tests
unittest.TextTestRunner(verbosity=2).run(suite)
if __name__ == '__main__':
unittest.main()
至于setUp和tearDown片段,我会将它们放在您的测试模块中,这样您的Test1Test可能看起来像这样:
# test1.py
import common_page_elements as page_elements
from selenium import webdriver
class Test1Test(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(30)
self.driver.get("http://url_for_page")
def tearDown(self):
self.driver.quit()
self.assertEqual([], self.verificationErrors)
def testLoginlogout(self):
# Likely not necessary to redefine `driver` here - just use `self.driver`
driver = self.driver
# Not sure how this relates to the `get` in `setUp`
driver.get(self.base_url)
driver.find_element_by_id(page_elements.textfield_username).clear()
driver.find_element_by_id(page_elements.textfield_username).send_keys(username)
driver.find_element_by_id(page_elements.textfield_password).clear()
driver.find_element_by_id(page_elements.textfield_password).send_keys(password)
driver.find_element_by_name(page_elements.button_submit).click()
driver.find_element_by_id(pageelements.link_logout).click()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。