Exemplo n.º 1
0
 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
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
 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
Exemplo n.º 7
0
 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
Exemplo n.º 8
0
    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