我目前正在使用WinAppDriver和Python为专有的Windows桌面应用程序编写自动化脚本。我们的应用程序让用户上传一些文件,根据上传的文件进行一些幕后计算,然后输出结果。我已经实现了使用UI上传这些文件的自动化,并且没有任何问题。执行此操作的过程如下所示:
单击“选择文件”按钮。在弹出窗口中浏览到文件位置
单击“文件名”字段并输入文件的直接路径。单击OK(这是通过Python键盘库完成的)
对所有必要的文件重复前面的步骤
单击“开始”
为了整理脚本,我将文件路径设置为变量,而不是在代码中使用它们的直接路径。然后我只需调用所需文件的变量名
例如file_to_upload_1: str = r”C:\Users\user\...\filename.txt
我已经创建了一个单独的filePaths.py
,其中存储了所有设置为变量的文件路径,因此将来添加/修改它们很容易,而且都在一个地方
我遇到的问题是,当我import
这个.py
包含设置为变量的文件路径时。现在,为了简单起见,我正在做from filePaths import *
。这通常是不赞成的,VS代码会向我抛出警告,告知我已导入未使用的导入。我继续将变量设置为单独的类,然后尝试以以下方式导入它们:from filePaths import dataset_1
当我这样做时,会出现以下错误:Undefined variable “variable_name”
并且我的测试无法运行。似乎只有在我导入所有东西的情况下,我才能让这一切正常工作,如果可能的话,我希望避免这样做。我所有的脚本都在同一个目录中。我错过了什么
代码示例:
from filePaths import * <-- THIS WORKS!
# from filePaths import class_1 <-- THIS DOES NOT
#Open App
desired_caps = {}
desired_caps["app"] = "C:\\Users\\Public\\Desktop\\Application_Being_Tested.lnk"
driver = webdriver.Remote("http://127.0.0.1:4723", desired_caps)
#Login
driver.find_element_by_accessibility_id("Username").send_keys("tester")
driver.find_element_by_accessibility_id("UserPassword").send_keys("password")
driver.find_element_by_accessibility_id("btnLogin").click()
###Upload Files###
#First File To Upload
driver.find_element_by_accessibility_id("ChooseFile").click()
time.sleep(.1)
driver.find_element_by_accessibility_id("FileName").click()
keyboard.write(filePaths_variable)
keyboard.press_and_release('enter')
您有三种选择:
from filePaths import *
)from filePaths import object1, object2, object3 #...
)import filePaths
然后filePaths.object1 #etc
)有些选项可能被认为是比其他选项更好的编程风格
通配符起作用的原因是,如果在import语句中列出了
filePaths
内创建的所有对象,则它与上面的选项2相同。通常,您应该只选择性地导入所需的方法和对象,或者只导入脚本并根据需要使用点表示法来选择性地使用方法和对象下面的示例代码显示了如何使用点表示法
文件1:
文件2:
然后,运行main.py输出:
如果改为main.py,则结果相同:
请注意,如果我们将以下代码添加到main.py的两个版本中:
我们发现
bob
在显式导入时在全局空间中,但在使用点表示法和一般非显式导入语句时不存在。因此,选择一种导入方法而不是另一种导入方法可能有一些实际原因(例如,如果您的程序较长且复杂,并且希望更轻松地管理潜在的名称冲突,则应使用点表示法)好吧,我想出了一个解决办法
我有我的
filePaths.py
模块,其中class_1
包含一组特定变量:var_1
,var_2
,等等在需要这些变量的脚本中,我引入了如下模块:
import filePaths
path = filePaths.class_1
当我调用
class_1
中的一个变量而不是仅仅调用var_1
时,我调用了path.var_1
,它没有出现任何问题。谢谢大家的帮助相关问题 更多 >
编程相关推荐