我正在尝试捕获自动化程序中的错误,并将其作为参数传递给另一个函数。 我的目标是存储在自动机过程中引起错误的硒对象,并在主要功能完成后对其进行处理。
现在,我将错误详细信息发送到csv文件中:
JArray arr = JArray.Parse(json);
如您所见, handle_errors()函数带有3个参数,并且:
def send_keys_dropdown(self,url,csv_name):
elements = bot.find_elements_by_xpath("//a[@data-tag='globalize']")
for elem in elements:
class_of_element = elem.get_attribute("class")
if class_of_element == 'CsLinkButton':
try:
# Some actions here
except (ElementNotInteractableException, ElementNotVisibleException) as e:
handle_errors(elem, url, e)
pass
此函数将从csv中获取url,然后转到导致错误的页面,接下来应该是导致错误的find元素。但是,我不知道如何存储这些硒对象。
我试图直接传递元素(不编写csv),但仍然无法正常工作。
感谢您的帮助!
答案 0 :(得分:1)
我假设您要在主脚本完成后重试/调查错误。在这种情况下,不可能直接保存WebElement对象以备将来使用,因为该元素的所有上下文已经丢失。
您可以将定位器保存到csv,或者按照@pcalkins的建议,保存HTML的内容,以便以后进行调查。
此外,我建议您从handle_error()
拆分零件读取错误,并将其移至要重试/调查的位置。
def send_keys_dropdown(self,url,csv_name):
by, locator = By.XPATH, "//a[@data-tag='globalize']"
elements = bot.find_elements_by_xpath("//a[@data-tag='globalize']")
for elem in elements:
class_of_element = elem.get_attribute("class")
if class_of_element == 'CsLinkButton':
try:
# Some actions here
except (ElementNotInteractableException, ElementNotVisibleException) as e:
handle_errors(by, locator, url, e)
pass
def handle_errors(self, by, locator, url, e):
bot = self.bot
with open('errors.csv', mode='w', newline='', encoding="utf-8") as csv_file:
fieldnames = ['URL', 'By', 'Locator', 'Error']
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({ 'URL': url, 'By': by, 'Locator': locator, 'Error':e })
def retry_errors(self):
bot = self.bot
with open('errors.csv', 'rt',encoding='utf8') as csvfile:
errors_list = csv.reader(csvfile, delimiter=',', quotechar='"')
errors_list = list(errors_list)
for error in errors_list:
# actions you want to retry