我试图弄清楚为什么基本上同一行代码在一个函数中起作用,而在另一个函数中起作用。
我有三个文件,如下所示。
我的问题是它运行default_login()并且没有find_element_by_xpath行的问题,但是然后无法运行log_out()并在find_element_by_xpath行炸出并出现以下错误: -
AttributeError: 'NoneType' object has no attribute 'find_element_by_xpath'
我可以在没有定义函数的文件中独立地运行同一行,并且它找到没有问题的元素。
运行tearDown()行self.driver.quit()时,我也得到相同(类似)的错误: -
AttributeError: 'NoneType' object has no attribute 'quit'
如果有人能告诉我为什么会这样失败,我会非常感激。我遇到了各种各样的问题,并开始怀疑我是否在某处配置了错误...
项目文件: -
initialisation.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
login.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")
just_a_test.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)
答案 0 :(得分:0)
没有return
语句的函数本质上是return None
的函数。您的函数login.default_login()
没有return
语句,因此返回None
。然后将self.driver
分配给None
:
self.driver = login.default_login(self.driver)
只需将return driver
添加到login.default_login()
和login.log_out()
函数即可修复这两个错误。