def upload(self, xpath, value): try: element = self.driver.find_element_by_xpath(xpath) BrowserManage.upload(self.driver, element, value) result = {"state": True, "info": ""} except Exception as e: result = { "state": False, "info": getErrInfo(xpath, "upload", value, str(e)) } return result
def selectByIndex(self, xpath, value): result = {} try: element = self.driver.find_element_by_xpath(xpath) BrowserManage.selectByIndex(self.driver, element, int(value)) result = {"state": True, "info": ""} except Exception as e: result = { "state": False, "info": getErrInfo(xpath, "selectByIndex", value, str(e)) } return result
def ExistInSecs(self, xpath, value): try: t = 0 disState = False while (t <= value): if (BrowserManage.isElementPresent(self.driver, By.XPATH, xpath)): disState = True break else: time.sleep(0.25) t = t + 0.25 if (disState and value.lower() == self.YES): result = {"state": True, "info": ""} elif ((not disState) and value.lower() == self.NO): result = {"state": True, "info": ""} else: result = {"state": False, "info": getErrInfo(xpath, "isDisplayed", value, "isn't e:" \ + disState)} except Exception as e: result = { "state": False, "info": getErrInfo(xpath, "isDisplayed", value, str(e)) } return result
def mustExist(self, xpath, value): result = {} if (not BrowserManage.isElementPresent(self.driver, By.XPATH, xpath)): raise ValueError, getErrInfo(xpath, "mustExist", value, "is not Exist!") else: result = {"state": True, "info": ""} return result
def sameAsLocalFile(self, xpath, value, proxy=""): try: element = self.driver.find_element_by_xpath(xpath) tagName = element.tag_name if (tagName.lower() == "img"): urlPath = element.get_attribute("0src") elif (tagName.lower() == "a"): urlPath = element.get_attribute("href") else: raise ValueError("the elemnet's tag is neither <img> nor <a>!") localFileDir = os.path.abspath(os.path.dirname(value)) #检查是否存在下载临时文件夹及临时文件,没有的话,创建一个 tempDir = os.path.join(localFileDir, "temp") if (not os.path.exists(tempDir)): os.makedirs(tempDir) tempFile = os.path.join( tempDir, "tmp" + datetime.datetime.now().strftime("%Y%m%d%H%M%S")) if (os.path.exists(tempFile)): os.remove(tempFile) #下载文件到临时文件夹 cookieStr = BrowserManage.getCookieString(self.driver) if (proxy == "" or proxy == None): opener = urllib2.build_opener() else: proxy_handler = urllib2.ProxyHandler({"http": proxy}) opener = urllib2.build_opener(proxy_handler) opener.addheaders.append(("Cookie", cookieStr)) #print cookieStr f = opener.open(urlPath) with open(tempFile, "wb") as stream: stream.write(f.read()) time.sleep(5) #比较 rs = filecmp.cmp(tempFile, value, 1) if (rs): result = {"state": True, "info": ""} else: result = {"state": False, "info": getErrInfo(xpath,"sameAsLocalFile",value,"isn't same as localfile:"\ +value)} if (os.path.exists(tempDir)): import shutil shutil.rmtree(tempDir) except Exception as e: result = { "state": False, "info": getErrInfo(xpath, "sameAsLocalFile", value, str(e)) } return result
def textEquals(self, xpath, value): try: element = self.driver.find_element_by_xpath(xpath) disText = BrowserManage.slimmingString(element.text) if (value.strip() == disText): result = {"state": True, "info": ""} else: result = {"state": False, "info": getErrInfo(xpath, "textEquals",value,"isn't same as realText:" \ + disText)} except Exception as e: result = { "state": False, "info": getErrInfo(xpath, "isDisplayed", value, str(e)) } return result
def isExist(self, xpath, value): try: disState = BrowserManage.isElementPresent(self.driver, By.XPATH, xpath) if (disState and value.lower() == self.YES): result = {"state": True, "info": ""} elif ((not disState) and value.lower() == self.NO): result = {"state": True, "info": ""} else: result = {"state": False, "info": getErrInfo(xpath, "isExist",value,"isn't same as realState:" \ + disState)} except Exception as e: result = { "state": False, "info": getErrInfo(xpath, "isExist", value, str(e)) } return result
def fixTheForm(self, title,datas,logDir=None,filePath=None,defaultParams=None): params={} if(defaultParams <> None and defaultParams.__len__()>0): for (k,v) in defaultParams.items(): params.__setitem__(k,v) result = {"state": True, "info": self.getNowStrftime(),"title":">>>"+title} for i in range(datas.__len__()): tmp = datas.__getitem__(i) _op=tmp.get("op").lower() _xpath=tmp.get("xpath") _value=tmp.get("value") if(_op=="skip"): continue #处理保存参数操作,value是个有返回值的js语句 pattern1=re.compile(r"\{@(\w+)@\}") m1=pattern1.match(_op) if(m1): try: ret=str(self.driver.execute_script(_value)) self.driver.implicitly_wait(2) params.__setitem__(m1.group(1),ret) t_result = {"state": True, "info": ""} result = self.mergeResult(result,t_result) continue except Exception as e: t_result = {"state": False, "info": getErrInfo(_xpath,"executeJs",_value,str(e))} result = self.mergeResult(result,t_result) continue #print params #处理带参数的xpath if (_xpath.__contains__(self.XPATHARG) and _value.__contains__(self.SPLITMARK)): indx = _value.find(self.SPLITMARK) xpathParm = _value[:indx] _xpath = _xpath.replace(self.XPATHARG,xpathParm) _value = _value[indx + self.SPLITMARK.__len__():] #处理value中含有参数 pattern2=re.compile(r".*\{@(\w+)@\}.*") c=0 while pattern2.match(_value) and c<100: #防止无限循环 m2=pattern2.match(_value) t_key=m2.group(1) c=c+1 if(params.has_key(t_key)): _value=_value.replace("{@"+t_key+"@}",params.get(t_key)) else: _value==_value.replace("{@"+t_key+"@}","{"+t_key+"}") #处理调用公共步骤 if(_op=="call" and filePath<>None): dParams={} tValues=_value.split(self.SPLITMARK) if(tValues.__len__()>1): for i in range(1,tValues.__len__()): tParamValue=tValues[i].split("=") dParams.__setitem__(tParamValue[0],tParamValue[1]) t_result=self.runSteps(filePath,tValues[0],None,dParams).__getitem__(0) t_result.__setitem__("info",u"第"+str(i+1)+u"步调用公共步骤"+_value+":"+t_result.get("info")) result = self.mergeResult(result,t_result) continue #处理上传\比较下载文件操作的相对链接 if((_op=="upload" or _op=="sameaslocalfile") and (not _value.__contains__(":"))): if(logDir<>None): _value=os.path.join(os.path.dirname(logDir),_value) else: print "can't find the logs dir,can't use the relative path" #处理正常操作 t_result = self.doOperate(_op,_xpath,_value) if(not t_result.get("state")): if((_xpath or "").__len__()>0 and BrowserManage.isElementPresent(self.driver,By.XPATH,_xpath)): BrowserManage.scrollToElement(self.driver,self.driver.find_element_by_xpath(_xpath)) if(logDir<>None): snapFile=os.path.join(logDir,self.getNowStrftime2()+".png") self.driver.get_screenshot_as_file(snapFile) snapInfo="<img 0src=\"file:\\\\\\"+os.path.abspath(snapFile).strip()+"\" height=\"600\" width=\"800\">" else: print "can't find the logs dir,can't use the relative path" snapInfo="" t_result.__setitem__("info",u"第"+str(i+1)+u"步:"+t_result.get("info")+u"\n截图:\n"+snapInfo+"\n") result = self.mergeResult(result,t_result) if(result.get("state")): result.__setitem__("info",result.get("info")+" PASS\n") return result