我正在将示例代码与unittest
一起使用,但是执行该示例时会收到错误消息-'str'对象没有属性'get'。
我搜索了Google,但没有得到答案。
from selenium import webdriver
import unittest
class google1search(unittest.TestCase):
driver = 'driver'
@classmethod
def setupClass(cls):
cls.driver = webdriver.Chrome(chrome_options=options)
cls.driver.implicitly_wait(10)
cls.driver.maximize_window()
def test_search_automationstepbystep(self):
self.driver.get("https://google.com")
self.driver.find_element_by_name("q").send_keys("Automation Step By step")
self.driver.find_element_by_name("btnk").click()
def test_search_naresh(self):
self.driver.get("https://google.com")
self.driver.find_element_by_name("q").send_keys("Naresh")
self.driver.find_element_by_name("btnk").click()
@classmethod
def teardownClass(cls):
cls.driver.close()
cls.driver.quit()
print("Test completed")
if __name__== "__main__":
unittest.main()
应该执行2个步骤并给出结果传递。
答案 0 :(得分:1)
在上面的代码中:
没有对self.driver进行初始化class Mother(object):
def __init__(self):
self.haircolor = "Brown"
class Child(Mother):
def __init__(self):
super(Child, self).__init__()
def print_haircolor(self):
print self.haircolor
c = Child()
c.print_haircolor() # output: brown
启动的驱动程序用于
self.driver.get("https://google.com")
请将 cls 替换为 self
答案 1 :(得分:1)
我想扩展@sarthak响应。在示例代码方法中,使用setUpClass
和tearDownClass
。这些方法被称为准备测试类,在执行测试类中的所有测试之前仅被调用一次。
这可以解决您的问题,因为在每次测试开始时,您都将覆盖driver
对象的内部状态,并且您之前的测试执行不会影响您的下一个测试结果。在这种情况下,您需要修改测试以使用类对象:
def test_search_automationstepbystep(self):
TestClass.driver.get("https://google.com")
TestClass.driver.find_element_by_name("q").send_keys("Automation Step By step")
TestClass.driver.find_element_by_name("btnk").click()
def test_search_naresh(self):
TestClass.driver.get("https://google.com")
TestClass.driver.find_element_by_name("q").send_keys("Naresh")
TestClass.driver.find_element_by_name("btnk").click()
TestClass
是测试类的名称。
另一种选择是在每个测试用例之前使用setUp
和tearDown
方法初始化driver
对象:
def setUp(self):
self.driver = webdriver.Chrome(chrome_options=options)
self.driver.implicitly_wait(10)
self.driver.maximize_window()
def tearDown(self):
self.driver.close()
self.driver.quit()
print("Test completed")
setUp
和tearDown
方法都将TestClass
的实例作为self
的参数,并且您的测试应该可以正常工作,而无需进行任何其他更改。
注意:通常,第二个选项对于单元测试更可取,因为您无需在每次测试中都确保在使用
driver
之前覆盖find_element_by_name
内部状态。在第二个选项中,您可以将self.driver.get("https://google.com")
代码放入setUp方法中,使它无论如何都要在每个测试用例之前执行。