Example #1
0
def rowWalker():
    global driver, prevTrail
    try:
        rows = driver.find_elements_by_css_selector('table.blueTable:nth-child(1) tr')
        waitUntil(lambda:all(_.is_displayed() for _ in rows))
        rows = [_ for _ in rows if _.text.startswith('Firmware')]
        numRows = len(rows)
        startIdx = getStartIdx()
        for idx in range(startIdx, numRows):
            ulog('row idx=%s'%idx)
            if not rows[idx].text.startswith('Firmware\n'):
                continue
            prevTrail += [idx]
            versionWalker(rows[idx])
            prevTrail.pop()
    except Exception as ex:
        ipdb.set_trace()
        traceback.print_exc()
def rowWalker():
    global driver, prevTrail
    try:
        rows = driver.find_elements_by_css_selector(
            'table.blueTable:nth-child(1) tr')
        waitUntil(lambda: all(_.is_displayed() for _ in rows))
        rows = [_ for _ in rows if _.text.startswith('Firmware')]
        numRows = len(rows)
        startIdx = getStartIdx()
        for idx in range(startIdx, numRows):
            ulog('row idx=%s' % idx)
            if not rows[idx].text.startswith('Firmware\n'):
                continue
            prevTrail += [idx]
            versionWalker(rows[idx])
            prevTrail.pop()
    except Exception as ex:
        ipdb.set_trace()
        traceback.print_exc()
def cssA(path):
    global driver
    return driver.find_elements_by_css_selector(path)
def cssWithText(css:str,txt:str)->WebElement:
    global driver
    return next((_ for _ in driver.find_elements_by_css_selector(css) if  
        _.text == txt), None)
def versionWalker():
    global startTrail,prevTrail,driver
    try:
        waitClickable('.treeLinks > a:nth-child(1)')
        ulog('current_url=%s'%driver.current_url)
        crumbs=waitText('.csProductSelectorBreadcrumb').replace('\n', ' > ')
        ulog('crumbs=%s'%crumbs)

        # click Expand All
        numNodes = len(driver.find_elements_by_css_selector('.tree a'))
        ulog('number of versions=%d'%numNodes)
        try:
            with UntilTextChanged('.tree'):
                clickElem(waitClickable('.treeLinks > a:nth-child(1)'))
        except TimeoutException:
            pass
        treeText=waitText('.tree')
        ulog('treeText="%s"'%treeText)

        if startTrail:
            startIdx=startTrail.pop(0)
        else:
            startIdx=1
        ulog('startTrail=%s'%startTrail)
        ulog('prevTrail=%s'%prevTrail)
        ulog('startIdx=%d'%startIdx)
        assert startIdx >= 1

        try:
            prevFwVer=waitText('.tree a.nodeSel', 5)
        except TimeoutException:
            uprint("css='.tree a.nodeSel' not found")
            prevFwVer=None
        ulog('prevFwVer="%s"'%prevFwVer)
        for idx in range(startIdx, numNodes):
            nodes = driver.find_elements_by_css_selector('.tree a')
            isLeaf = (nodes[idx-1].text != '')
            ulog('goto Trail=%s'%(prevTrail+[idx]))
            if isLeaf:
                if not nodes[idx].text.strip():
                    continue
                fwVer=nodes[idx].text.strip()
                nodeClass=nodes[idx].get_attribute('class')
                ulog('fwVer="%s", nodeClass="%s"'%(fwVer,nodeClass))
                if 'nodeSel' not in nodeClass:
                    noWait= (prevFwVer==fwVer) if prevFwVer else False
                    try:
                        with UntilTextChanged('table#imageTableContainer',10,1,noWait):
                            ulog('Click "%s"'%fwVer)
                            clickElem(nodes[idx])
                    except TimeoutException:
                        with UntilTextChanged('table#imageTableContainer',10,1,noWait):
                            ulog('Click "%s" twice'%fwVer)
                            clickElem(nodes[idx])

                        
                prevTrail+=[idx]
                tableRowWalker(fwVer)
                prevTrail.pop()
                prevFwVer=fwVer
        # go back page
        crumbs=getElems('.csProductSelectorBreadcrumb a')
        ulog('backto "%s"'%getElemText(crumbs[-1]))
        ulog('prevTail=%s'%prevTrail)
        if prevTrail==[2, 1, 0, 1, 2, 0]:
            ipdb.set_trace()
        clickElem(crumbs[-1])
    except Exception as ex:
        ipdb.set_trace()
        print(ex); traceback.print_exc()
        driver.save_screenshot('cisco_versionWalker.png')