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')