【发布时间】:2021-10-02 07:42:27
【问题描述】:
我有这些课程:
class BaseElement:
def __init__(self, locator):
self.locator = locator
class ButtonElementAndWaitNewElement(BaseElement):
def __init__(self, locator, element_to_appear_path):
super(ButtonElementAndWaitNewElement, self).__init__(locator)
self.element_to_appear_path = element_to_appear_path
def __get__(self, obj, owner):
driver = obj.driver
element = WebDriverWait(driver, 30).until(
EC.element_to_be_clickable(self.locator))
element.click()
WebDriverWait(driver, 30).until(
EC.presence_of_element_located(self.element_to_appear_path))
我正在使用这个创建一个元素:
class WorkerTimePage:
time_and_expense_menu = ButtonElement(By.ID, "time_expense")
timesheet_from_3_weeks_ago = ButtonElementAndWaitNewElement(
(By.ID, "timesheet_id"),
(By.XPATH, '//th[@class="workday"]'))
我基本上想要做的是在我的测试中能够只调用timesheet_from_3_weeks_ago 并从我的类中执行操作(在这种情况下,只需单击一个元素,然后等待一个新元素),我有我的测试是这样的:
from cloud_testing.login.page_objects import LoginPage
from cloud_testing.test_base import TestBase
from cloud_testing.worker.page_objects import WorkerTimePage
class TestEditTimesheet(TestBase):
login_page = None
worker_time_page = None
def setup_method(self):
super(TestEditTimesheet, self).setup_method()
self.login_page = LoginPage(self.driver)
self.worker_time_page = WorkerTimePage(self.driver)
def test_worker_adds_punch_to_timesheet(self):
self.login_page.login('bescoto@fgeneric.com', 'bescoto')
self.worker_time_page.time_and_expense_menu.click()
self.worker_time_page.timesheet_from_3_weeks_ago()
它会正确执行单击并等待新元素的操作,但最后会触发此错误:
self.worker_time_page.timesheet_from_3_weeks_ago()
TypeError: 'NoneType' 对象不可调用
不知道我需要改变什么来做我正在寻找的东西,感谢任何帮助。
【问题讨论】:
-
可以分享
WorkerTimePage源代码吗? -
对不起,'WorkerTimePage' 基本上只包含 2 个元素,'time_and_expense_menu 和另一个我已经提到的 'timesheet_from_3_weeks_ago' ,时间和费用只是一个按钮,但问题是另一个跨度>
-
如果您编辑您的帖子并添加源代码,它会容易得多。因为
self.worker_time_page.time_and_expense_menu.click()工作正常,程序在第二种方法self.worker_time_page.timesheet_from_3_weeks_ago()上停止,并且会有问题。这就是为什么我想看WorkerTimePage的源代码。
标签: python python-3.x selenium-webdriver webdriver