Python Forum
Unable to switch out of nested frames into main page - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: Web Scraping & Web Development (https://python-forum.io/forum-13.html)
+--- Thread: Unable to switch out of nested frames into main page (/thread-19868.html)



Unable to switch out of nested frames into main page - abi17124 - Jul-17-2019

I have a program that does automated data entry on the PLM platform, ENOVIA, with specific information that I input. I'm using Selenium to navigate the webpage. There is a segment where the program has to enter 4 nested frames to click a certain element. It does that well and makes the necessary edits, the problem I'm facing is when I try to exit out of the frames back to the top of the HTML code to get back to the main page using switch_to.default_content(). For some reason, after it switches into the 4th child of the nested frames and makes these edits, I see that the window changes to only consist of these frames and whats within them, and nothing above the 1st parent frame. So switch_to.default_content() doesn't seem work.


This is the code that really matters, where it switches into the 4th and final frame "DSCObjectSummary" and makes these edits
    

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)
    
    
I have tried switching backwards from 4th to 1st parent frame then using switch_to.default_content() only to be thrown a NoSuchFrameException. All I want is to be able to get back out of the frames, just like I got into them, without changing/removing anything in the window and get back to the top level HTML.

I have realized that the window only changes when I try to interact with the elements in the 4th nested frame using commands such as send_keys() or click(). Other than that, if I stop at only accessing the frame, I am able to exit out of them perfectly fine back into the top level using default_content() and interact with other elements outside of these frames. Any ideas as to what could be causing this?