无法从嵌套帧切换到主页

2024-07-04 05:35:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个程序,在PLM平台ENOVIA上自动输入数据,并输入特定的信息。我正在使用Selenium来浏览网页。有一段程序必须输入4个嵌套帧才能单击某个元素。它做得很好,并进行了必要的编辑,我面临的问题是,当我试图退出框架回到HTML代码的顶部,然后使用开关返回主页面时_to.default\u内容()。出于某种原因,在它切换到嵌套帧的第四个子帧并进行这些编辑之后,我看到窗口将更改为只包含这些帧和其中的内容,而在第一个父帧之上没有任何内容。So开关_to.default\u内容()似乎不起作用。你知道吗

这才是真正重要的代码,它将切换到第4帧(也是最后一帧)“DSCObjectSummary”并进行这些编辑


def clickCheck(Method, Locator, elemName):
    #Add If Else to check for element availibility
    #Do Retries of searchess
    try:
        wait.until(EC.element_to_be_clickable((Method, Locator)))
        print(elemName + ' Clickable')
    except NoSuchElementException:
        print("Cannot Find Element")

...... Lots of code and comes to this point
    #Switching into 4 nested frames to click "EDIT DETAILS" Button
    wait.until(EC.frame_to_be_available_and_switch_to_it("content"))
    wait.until(EC.frame_to_be_available_and_switch_to_it("detailsDisplay"))
    wait.until(EC.frame_to_be_available_and_switch_to_it("portalDisplay"))
    wait.until(EC.frame_to_be_available_and_switch_to_it("DSCObjectSummary"))
    clickCheck(By.ID, 'DSCEditObjectSummary', "Edit Details")
    elemEdit = browser.find_element_by_id("DSCEditObjectSummary")
    elemEdit.click()

    #Click the Customer Dropdown
    clickCheck(By.ID, "PMCCustomerId", "Customer Dropdown")
    elemCust = browser.find_element_by_id("PMCCustomerId")
    elemCust.click()
    elemCust.send_keys("Ces")
    """Add If Conditions to check part number"""

    #Click Document Type Field
    clickCheck(By.ID, "PMCDocumentTypeId", "Document Type")
    elemDoc = browser.find_element_by_id("PMCDocumentTypeId")
    elemDoc.click()
    elemDoc.send_keys("MOD")

    """Add Check to see if part is Active/Obsol, if Obs, make Active"""

    #Click Dashnumber field
    clickCheck(By.ID, "PMCDashNumber", "Dash Number")
    elemDash = browser.find_element_by_id("PMCDashNumber")
    elemDash.click()
    elemDash.clear()
    elemDash.send_keys("-1")

    #Click Done Button
    clickCheck(By.CSS_SELECTOR, "button[class='btn-primary'][type='button']", "Done Button")
    elemDone = browser.find_element_by_css_selector("button[class='btn-primary'][type='button']")
    elemDone.click()

    browser.switch_to.default_content()
    time.sleep(20)

我尝试过使用开关从第4个父帧向后切换到第1个父帧_到框架(framename)按顺序,然后使用开关_to.default\u内容()只会引发NoSuchFrameException。我所希望的就是能够回到框架之外,就像我进入框架一样,不需要更改/删除窗口中的任何内容,就可以回到顶层HTML。你知道吗


Tags: andtobrowser内容byelementbefind
2条回答

试着找到所有的iframe并切换到你需要的iframe。你知道吗

// find all your iframes
List<WebElement> iframes = driver.findElements(By.xpath("//iframe"));
        // print your number of frames
        System.out.println(iframes.size());

        // you can reach each frame on your site
        for (WebElement iframe : iframes) {

            // switch to every frame
            driver.switchTo().frame(iframe);

            // now within the frame you can navigate like you are used to

        }

作为driver.switch_to.default_content()的替代方法,您还可以使用:

browser.switch_to.parent_frame()

更新

由于您仍然面临相同的问题,更好的方法是等待elemDone.click()步骤完成(JavaScript/Ajax调用),您可以对一些visibility_of_element_located()进行WebDriverWait,如下所示:

elemDone = browser.find_element_by_css_selector("button[class='btn-primary'][type='button']")
elemDone.click()
WebDriverWait(browser, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "css_of_an_element_which_gets_displayed_after_the_click")))
browser.switch_to.default_content()
# as an alternative use `switch_to.parent_frame()`
# browser.switch_to.parent_frame()

注意出于调试目的,您可以用time.sleep(5)替换WebDriverWait


奥特罗

“Malformed URL: can't access dead object” in selenium when trying to open google

相关问题 更多 >

    热门问题