我试图弄明白为什么本质上同一行代码在一个函数中有效,但在另一个函数中无效。
我有三个文件,如下所示。
我的问题是,它运行default\u login()很好,对find\u element\u by\u xpath行没有问题,但随后无法运行log\u out()并在find\u element\u by\u xpath行弹出,出现以下错误:-
AttributeError: 'NoneType' object has no attribute 'find_element_by_xpath'
我可以在一个没有定义函数的文件中独立运行同一行,它可以找到没有问题的元素。
当它运行tearDown()行self时,我也会得到相同(类似)的错误。驾驶员退出():-
AttributeError: 'NoneType' object has no attribute 'quit'
如果有人能告诉我为什么它会这样失败,我将不胜感激。我有各种各样的问题,像这样,并开始怀疑我是否有什么配置错误的地方。。。
项目文件:-
初始化。py公司
from selenium import webdriver
def start_webdriver():
driver = webdriver.Chrome('C:\TEMP\chromedriver.exe')
driver.maximize_window()
return driver
def start_browser(driver):
driver.get("https://myURL")
return driver
登录。py公司
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
def default_login(driver):
wait = WebDriverWait(driver, 5)
login_link = driver.find_element_by_xpath("//a[contains(@href, 'login')]")
login_link.click()
username_text_field = wait.until(ec.element_to_be_clickable((By.NAME, "email")))
password_text_field = driver.find_element_by_name("password")
username_text_field.send_keys("username")
password_text_field.send_keys("password")
login_button = driver.find_element_by_xpath("//*[@class='btn save btn-primary']")
login_button.click()
def log_out(driver):
new_project = driver.find_element_by_xpath("//table[@id='my-projects-table']/tbody/tr/td[3]")
new_project.click()
logout_user = driver.find_element_by_class_name("dropdown-toggle")
logout_user.click()
logout_sign_out = driver.find_element_by_xpath("//a[contains(@href, 'logout')]")
logout_sign_out.click()
print("logged out")
只是一个测试。py公司
import unittest
from Common import initialisation, login
class RegisterPatientsTests(unittest.TestCase):
def setUp(self):
self.driver = initialisation.start_webdriver()
self.driver = initialisation.start_browser(self.driver)
def tearDown(self):
self.driver.quit()
def test_another_quick_test(self):
self.driver = login.default_login(self.driver)
self.driver = login.log_out(self.driver)