微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解决python硒中的此错误,我得到的错误消息是TypeError:类型方法的对象不是JSON可序列化的

如何解决如何解决python硒中的此错误,我得到的错误消息是TypeError:类型方法的对象不是JSON可序列化的

单击父菜单下的子菜单时出现此错误,请帮助我解决此问题,当脚本调用“ Submenu方法”时发生此错误

enter code here

此类下层包含页面的所有定位符

class workflow_locator:
    # Create a new workflow locator
    dropdown_xpath = "(//DIV[@class='btn-group dropdown'])[1]"
    admin_menu_xpath = "(//A[@class='dropdown-item'])[3]"
    breadcrumb_xpath = "(//DIV[@class='left-menu-toggle'])[1]"
    workflow_menu_xpath = "(//A[@_ngcontent-ng-cli-universal-c5=''])[31]"
    workflow_submenu_xpath = "(//A[@href='/admin/workflows'])"
    new_btn_xpath = "(//DIV[text()=' New'])"
    workflow_name_xpath = "(//INPUT[@id='name'])[1]"
    workflow_description_xpath = "(//TEXTAREA[@id='description'])[2]"
    active_toggle_xpath = "(//SPAN[@class='slider'])"
    add_button_xpath = "(//BUTTON[@class='btn btn-primary btn-sm'])[text()='Add']"


#This class define the action method of the below test class
from Resources.Workflow_locator import workflow_locator
class CreateWorkflow(workflow_locator):
    def __init__(self,driver):
        self.driver = driver

    def click_drop_down_menu(self):
        self.driver.find_element_by_xpath(self.dropdown_xpath).click()

    def select_admin_from_the_drop_down_menu(self):
        self.driver.find_element_by_xpath(self.admin_menu_xpath).click()

    def click_breadcrumb_menu(self):
        self.driver.find_element_by_xpath(self.breadcrumb_xpath).click()

    def click_workflow_menu(self):
        self.driver.find_element_by_xpath(self.workflow_menu_xpath).click()
    def click_workflow_sub_menu(self):
        self.driver.find_element_by_xpath(self.click_workflow_sub_menu).click()

# This is a test class
     def test_workflow(self,setup):
            self.driver = setup
            self.driver.get(self.base_url)
            self.driver.maximize_window()
            self.lp = Login(self.driver)
            self.lp.set_Username(self.username)
            self.lp.click_next_btn()
            self.lp.set_password(self.Password)
            self.lp.click_signin_btn()
            self.lp.click_confirm_btn()
            self.driver.get_screenshot_as_file(".\\Screenshoots\\login.png")
            self.logger.info("############ User is successfully logged in ########### ")
            print("Login is successfully completed")
            self.logger.info("######### Creating WorkFlow #########")
            self.wf=CreateWorkflow(self.driver)
            self.wf.click_drop_down_menu()
            self.wf.select_admin_from_the_drop_down_menu()
            self.wf.click_breadcrumb_menu()
            self.wf.click_workflow_menu()
            self.wf.click_workflow_sub_menu()

我可以看到的异常是

def default(self,o): “”“在子类中实现此方法,使其返回 o的可序列化对象,或调用基本实现 (引发TypeError)。

    For example,to support arbitrary iterators,you Could
    implement default like this::

        def default(self,o):
            try:
                iterable = iter(o)
            except TypeError:
                pass
            else:
                return list(iterable)
            # Let the base class default method raise the TypeError
            return JSONEncoder.default(self,o)

    """
  raise TypeError(f'Object of type {o.__class__.__name__} '
                    f'is not JSON serializable')

E TypeError:类型方法的对象不可JSON序列化

enter image description here

解决方法

您有:

def click_workflow_menu(self):
    self.driver.find_element_by_xpath(self.workflow_menu_xpath).click()
def click_workflow_sub_menu(self):
    self.driver.find_element_by_xpath(self.click_workflow_sub_menu).click()

当您致电self.click_workflow_sub_menu()时,会发生以下情况:

  1. self.click_workflow_sub_menu被评估。但这将计算为绑定方法,而不是有效的xpath表达式。
  2. self.driver.find_element_by_xpath与第1步的结果一起调用,该结果不是有效的xpath表达式,并且会产生异常。

我相信这是您的问题。您可能的意思是:

def click_workflow_sub_menu(self):
    self.driver.find_element_by_xpath(self.workflow_submenu_xpath).click()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。