Python 带有JSON定位器类的引用文件
我的主文件中有JSON数据,让我们调用main.py,它使用Selenium驱动程序:Python 带有JSON定位器类的引用文件,python,json,python-3.x,Python,Json,Python 3.x,我的主文件中有JSON数据,让我们调用main.py,它使用Selenium驱动程序: main.py def get_user_data(browser): browser.get(JSON_URL) user_data = json.loads(browser.find_element_by_tag_name('body').text) browser.back() return user_data 要从中获取值,我使用: name = user_data
main.py
def get_user_data(browser):
browser.get(JSON_URL)
user_data = json.loads(browser.find_element_by_tag_name('body').text)
browser.back()
return user_data
要从中获取值,我使用:
name = user_data['name']
这个很好用。这是一个更大的程序,我希望使用一个类将这些定位器放在另一个名为locators.py的文件中,因此如果定位器发生更改,我只需在一个地方进行更改:
locators.py
class UserDataLocators:
NAME = user_data['name']
现在,由于未定义“用户数据”,上述操作失败。我喜欢这种方法,因为我在这个文件中的另一个类中有其他selenium定位器。这可能是一个超级简单的修复程序,但我如何才能使上述功能正常工作,以便在main.py文件中导入UserDataLocator并执行以下操作:
from locators import UserDataLocators
name = UserDataLocators.NAME
谢谢
更新1:
@maxhaz所以通过你所写的,它给了我一个想法,也许只是使用你的UserData类来解析一切,而不是仅仅存储定位器。基本上这就是我想要实现的。当其他模块与其交互时,用户_数据['name']将得到更新/更改。我希望将用户_数据存储在locators.py中,并能够访问它并与其他模块一起更新,每次更新后,每个模块都可以获得更新的数据
例如,locators.py将用户_数据设置为无,因为未启动浏览器。Main.py将是第一个与之交互的,并通过浏览器获取初始用户_数据['name']值。Module2.py还将从locators.py导入,并获得与main.py刚刚更新的相同的用户_数据。模块2将更新用户数据['name']。一旦发生这种情况,main.py和locators.py的新用户_数据['name']现在更新了吗
#locators.py
user_data = None
class UserData:
def __init__(self, browser):
self.browser = browser
self.name = self.get_user_data()['name']
def get_user_data(self):
self.browser.get(JSON_URL)
user_data = json.loads(browser.find_element_by_tag_name('body').text)
browser.back()
return user_data
#main.py
import locators
locators.user_data = UserData(browser).name
#module2.py
import locators
## do something here that modifies the actual user data that gets pulled ##
locators.user_data = UserData(browser).name
您可能希望在类中移动get_user_data函数: 定位器 类UserDataLocator: 定义初始自我,浏览器: self.browser=浏览器 self.name=self.get_user_数据['name'] def get_user_dataself: self.browser.getJSON_URL user_data=json.loadsbrowser.find_element_by_tag_name'body'。text 浏览器返回 返回用户数据 main.py 从定位器导入UserDataLocator name=UserDataLocatorsbrowser.name
谢谢你的回复。我更新了原来的问题。让我知道这是否有意义尽管你的代码更新1应该可以工作,但它可能不能充分利用这个类。另一种方法是添加user_数据作为类UserData的实例属性:self.user_data=self.get_user_data。每个类实例将有一个user_数据变量。