微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何调用python子目录中包含的Selenium Webdriver测试

我是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] 举报,一经查实,本站将立刻删除。

相关推荐