Python:是否可以压缩我的类似方法列表

标签 python selenium-webdriver

我有一个 ID 列表,我正在使用 Selenium IDE 捕获这些 ID 并将其放入 PyCharm 中。该列表如下所示:

filter_logs_query = (By.ID, "Query")
filter_logs_FromDateUI = (By.ID, "FromDateUI")
filter_logs_ToDateUI = (By.ID, "ToDateUI")
filter_logs_Ip = (By.ID, "Ip")
filter_logs_User = (By.ID, "User")  
filter_logs_Message = (By.ID, "Message")
filter_logs_RefID = (By.ID, "Refid")
filter_logs_Session = (By.ID, "Session")
filter_logs_Scope = (By.ID, "Scope")
filter_logs_EventNo = (By.ID, "EventNo")
filter_logs_Server = (By.ID, "Server")

每个 ID 都有一个定义,供用户向该 ID 发送 key ,列表如下所示:

def filter_logs_search_query(self, word):
    search_text = self.driver.find_element(*Elements.filter_logs_query)
    search_text.send_keys(word)

def filter_logs_logged_after(self, word):
    search_date = self.driver.find_element(*Elements.filter_logs_FromDateUI)
    search_date.send_keys(word)

def filter_logs_logged_before(self, word):
    search_date = self.driver.find_element(*Elements.filter_logs_ToDateUI)
    search_date.send_keys(word)

除了我需要从 *Elements 调用的函数之外,我的定义几乎相同。有没有办法可以压缩/缩短我的定义列表?

最佳答案

这是 Higher Order Functions. 的工作

每当遇到代码相同的情况时,除了被调用的函数,最好只传递该函数(注意f ):

def general_filter_logs(self, word, f):
    search_text = self.driver.find_element(*f)
    search_text.send_keys(word)

然后,其他函数可以根据广义高阶函数来定义。例如:

def filter_logs_search_query(self, word):
    general_filter_logs(word, Elements.filter_logs_query)

注意,你的重复函数不是很大,所以这里的增益不是很大。不过,这种技术对于更复杂的函数尤其有用。泛化函数的好处是,如果您需要对其进行更改,则只需更改一个函数(通用函数),而不是所有“克隆”函数。

另请注意,这似乎是 find_element 使用的技术!它不会强制您编写自己的自定义查找方法,而是允许您只传递一个函数。您现在所需要做的就是推迟谁负责选择传递的函数的责任。

关于Python:是否可以压缩我的类似方法列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44812840/

相关文章:

Python Selenium Webdriver `Failed to start browser: Permission Denied`

c# - 花了很长时间找不到 Selenium C# 元素

selenium - 确认 WebdriverIO 中的 Chrome 导航对话框

java - 如何在关键字驱动和数据驱动框架中实现TestNG?

python - 无法实例化 boto3 S3Transfer 类

python - 在字典列表中附加缺失值

python - 具有 3D 安全功能的 Cyber​​source 静默订单

python - OpenCV中的 channel 过滤

python - 在 Django 中上传视频并从视频创建缩略图

selenium-webdriver - 未初始化的常量Capybara::DSL