python - 是否可以像这样返回值?
问题描述
我有一个关于 Python 语法的问题,在谷歌上没有找到:/
我试图编写通用函数,用于在 Selenium 上搜索定位器。
我在 locators.py 中有定位器,它们看起来像这样:
class LoginForm:
email = {'css': '#email'}
password = {'css': ' #password'}
login_button = {'css': '#submitLoginForm'}
在 base_page.py 我有这个:
def __unify_locator(self,selector: dict):
elif 'css' in selector.keys():
return (By.CSS_SELECTOR,selector['css'])
def __element(self, selector: dict, index: int):
return self.driver.find_elements((self.__unify_locator(selector)))[index]
__unify_locator
如您所见,我试图从(By.CSS_SELECTOR,selector['css'])
. 我想让它变得敏捷,因为将来我可以使用 XPath 或 Link Text 等
是否可以返回这样的值?案例我在执行那部分代码时出错
解决方案
是否可以返回这样的值?案例我在执行那部分代码时出错
是的,你可以像这样返回一个元组。错误不是因为返回,而是因为你如何使用它。要将元组中的值作为参数分隔给另一个函数,请使用 splat 运算符*
:
self.driver.find_elements(*self.__unify_locator(selector))
^ here
一个建议:您可以直接将选择器编写为这样的一对:
email = (By.CSS_SELECTOR, '#email')
那么你根本不需要__unify_locator()
:
self.driver.find_elements(*selector)
或者,您的选择器可以是一个字典,为每个值的含义提供上下文:
email = {
'by': By.CSS_SELECTOR,
'value': '#email',
}
然后使用**
代替*
:
self.driver.find_elements(**selector)
最后,你不能elif
没有if
.,但我认为你只是没有在__unify_locator()
.
推荐阅读
- c# - C#在自动驾驶仪上将httpclient post转换为restsharp post而没有异步方法
- google-sheets - 带有列选择的查询 + 导入范围以显示匹配未显示的条件
- visual-studio-code - 有没有办法通过智能感知在 vs 代码中获取悬停时提供的文本?
- python - 检查数据框中的列是否处于纪元时间会给出不同的结果
- reactjs - 如何编写反应钩子 HOC
- python - 为什么此代码不是多线程的(尝试使用 pandas read_csv 分块读取文件并在单独的线程中处理每个块)
- c++ - 具有无效输入的映射返回映射的第一个插入值
- docker - 使 docker 上的秘密文件尽可能安全,分别替代隐藏敏感信息的方法
- php - Brew 服务无法启动
- python - 由于输入结束,jira.create_sprint() 返回 JiraError HTTP 500 No Content to map to Object