首页 > 解决方案 > 在 python 中执行 javascript 会导致 KeyError

问题描述

我在尝试在 python selenium 中执行脚本时遇到了困难......我正在尝试检查某个元素是否在指定的父级中,如果是,它应该返回 true。

这是我的代码:

    for box in range(len(browser.find_elements(*selector))):

    result = browser.execute_script("""
    var nodesArray = Array.prototype.slice.call(document.querySelectorAll(".o-boxes__item"));
    if(document.querySelector("div:nth-child({}) > div > div.m-package-box__body > div:nth-child(10) > div > label") === nodesArray[{}]){
        false
    }else{
        nodesArray[{}].contains(document.querySelector("div:nth-child({}) > div > div.m-package-box__body > div:nth-child(10) > div > label"));
    }""".format(box+1, box, box, box+1))
    print(str(result)) 

当我运行它时,它会在控制台中给我这个输出:

nodesArray[{}].contains(document.querySelector("div:nth-child({}) > div > div.m-package-box__body > div:nth-child(10) > div > label"));
>           }""".format(box+1, box, box, box+1))
E           KeyError: '\n            false\n        '

tests/test_shopEshop.py:111: KeyError

我不知道我还能做什么...我尝试更改 execute_script 部分中的代码,尝试更改字符串格式(f 格式、.format 方法、硬编码参数)但没有任何效果,我开始放弃……

标签: javascriptpythonstringseleniumformatting

解决方案


@Jortega 这是我的整个测试

    def test_package_box_href(browser, base_url, testrail_data_file, commentary):
    '''
        Sprawdza czy atrybut href w button w package boxie zgadza
        się z adresem URL do którego prowadzi oraz przy zmianach zaznaczonego toggle
    '''
    Menu(browser).go_to_page(Menu(browser).SHOP, Menu(browser).SHOP_SHOP)
    page_old = GenericTemplateOld(browser)

    testrail = ApiTestrailRequest(testrail_data_file["run_id"], '32252')
    verification = Assertions(browser, testrail_data_file, commentary)

    selector = page_old.PACKAGE_BOXES_BUTTON

    WebDriverWait(browser, 10).until(
            EC.url_to_be(base_url + '/sklepy-internetowe/')
        )

    for box in range(len(browser.find_elements(*selector))):

        print(len(browser.find_elements(*selector)))
        script ="""
        var nodesArray = Array.prototype.slice.call(document.querySelectorAll(".o-boxes__item"));

        if(document.querySelector("div:nth-child({}) > div > div.m-package-box__body > div:nth-child(10) > div > label") === nodesArray[{}]){
            return false;
        }else{
            return nodesArray[{}].contains(document.querySelector("div:nth-child({}) > div > div.m-package-box__body > div:nth-child(10) > div > label"));
        }
        """.format(1,0,0,1)

E KeyError: '\n return false;\n '


推荐阅读