class ReadIni(object): def __init__(self, filename=None, node=None): self.file_name = filename self.logger = UserLog().get_log() if filename == None: self.file_name = parent_dir + "/config/Element.ini" print(self.file_name) if node == None: self.node = "Element" else: self.node = node print(self.node) print(self.file_name) self.cf = self.load_ini(self.file_name) print(self.cf) def load_ini(self, file_name): cf = configparser.ConfigParser() cf.read(file_name) return cf # 获取value得值 def get_value(self, key): print(self.node) print(key) try: data = self.cf.get(self.node, key) print(data) return data except Exception as e: self.logger.info(e)
def __init__(self, driver, url): self.driver = driver self.driver.get(url) log = UserLog() self.logging = log.get_log() self.getele = Getelement(self.driver) self.read = Read_inifile() self.getname = Getname()
def __init__(self, driver: WebDriver, file=None, node=None): self.driver = driver self.log = UserLog() self.logger = self.log.get_log() if file == None: self.filename = parent_dir + '/config/Element.ini' else: self.filename = parent_dir + file self.rean_ini = ReadIni(filename=self.filename, node=node) self.logger.info(self.filename) self.logger.info(node)
def __init__(self): self.url = "https://dnapp.bitkinetic.com/api/v5/login/mplogin" self.body = { "zoneNum": "86", "phone": "15088132074", "password": "******" } self.logger = UserLog().get_log() print("初始化")
def __init__(self, filename=None, node=None): self.file_name = filename self.logger = UserLog().get_log() if filename == None: self.file_name = parent_dir + "/config/Element.ini" print(self.file_name) if node == None: self.node = "Element" else: self.node = node print(self.node) print(self.file_name) self.cf = self.load_ini(self.file_name) print(self.cf)
def __init__(self,platformName=None,platformVersion=None,deviceName=None,udid=None,appPackage=None,appActivity=None): if platformName == None: platform = 'Android' else: platform = platformName if platformVersion == None: version = '10.3.10.0' else: version = platformVersion if deviceName == None: device = 'Redmi111' else: device = deviceName if udid == None: udi = '56f46ae7' else : udi = udid if appPackage == None: Package = 'com.xueqiu.android' else: Package = appPackage if appActivity == None: Activity = 'com.xueqiu.android.view.WelcomeActivityAlias' else : Activity = appActivity desired_caps = {} desired_caps['platformName'] = platform # 设备系统 desired_caps['platformVersion'] = version # 设备系统版本 desired_caps['deviceName'] = device # 设备名称 desired_caps['udid'] = udi # 设备名称 # 设置APP信息,进入启动页 desired_caps['appPackage'] = Package desired_caps['appActivity'] = Activity self.driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps) self.driver.implicitly_wait(3) # 初始化 webdriver 之后,因式等待3秒 self.log = UserLog() self.logger = self.log.get_log() # 初始化读取元素定位信息类 filename = parent_dir + '/config/AppElement.ini' node = 'AppElement' self.read_ini = ReadIni(filename=filename,node= node)
class AppiumBase: def __init__(self,platformName=None,platformVersion=None,deviceName=None,udid=None,appPackage=None,appActivity=None): if platformName == None: platform = 'Android' else: platform = platformName if platformVersion == None: version = '10.3.10.0' else: version = platformVersion if deviceName == None: device = 'Redmi111' else: device = deviceName if udid == None: udi = '56f46ae7' else : udi = udid if appPackage == None: Package = 'com.xueqiu.android' else: Package = appPackage if appActivity == None: Activity = 'com.xueqiu.android.view.WelcomeActivityAlias' else : Activity = appActivity desired_caps = {} desired_caps['platformName'] = platform # 设备系统 desired_caps['platformVersion'] = version # 设备系统版本 desired_caps['deviceName'] = device # 设备名称 desired_caps['udid'] = udi # 设备名称 # 设置APP信息,进入启动页 desired_caps['appPackage'] = Package desired_caps['appActivity'] = Activity self.driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps) self.driver.implicitly_wait(3) # 初始化 webdriver 之后,因式等待3秒 self.log = UserLog() self.logger = self.log.get_log() # 初始化读取元素定位信息类 filename = parent_dir + '/config/AppElement.ini' node = 'AppElement' self.read_ini = ReadIni(filename=filename,node= node) def get_element(self,key): # read_ini = ReadIni(filename,node) '''封装查找元素''' local = self.read_ini.get_value(key) try: if local != None: by = local.split('>')[0] local_by = local.split('>')[1] if by == 'id': return self.driver.find_element_by_id(local_by) elif by == 'classname': return self.driver.find_element_by_class_name(local_by) elif by == 'name': return self.driver.find_element_by_name(local_by) elif by == 'xpath': return self.driver.find_element_by_xpath(local_by) elif by == 'ids': return self.driver.find_elements_by_id(local_by) elif by == 'accessibility_id': return self.driver.find_element_by_accessibility_id(local_by) elif by == 'xpaths': return self.driver.find_elements_by_xpath(local_by) elif by == 'mobile_id': return self.driver.find_element(MobileBy.ID,local_by) elif by == 'mobile_ids': return self.driver.find_elements(MobileBy.ID,local_by) elif by == 'mobile_xpath': return self.driver.find_element(MobileBy.XPATH,local_by) elif by == 'android_uiautomator': # local_by = 'new UiSelector().resourceId("com.xueqiu.android:id/login_account")' # local_by = 'new UiSelector().textContains("账号密码")' # local_by = 'new UiSelector().text("我的")' return self.driver.find_element_by_android_uiautomator(local_by) elif by == 'android_uiautomators': return self.driver.find_elements_by_android_uiautomator(local_by) else : self.logger.info('没有该定位方式') except Exception as e: self.logger.info('查找元素出现异常,异常信息为:' + {e}) def get_clildelement(self,eles:WebDriver,key): '''封装从父元素获取子元素''' data = self.read_ini.get_value(key) by = data.split('>')[0] value = data.split('>')[1] try: if by == 'id': ele = eles.find_element_by_id(value) return ele elif by == 'xpath': ele = eles.find_element_by_xpath(value) return ele except Exception as e: self.logger.info('查找元素出现异常,异常信息为:' + {e}) def get_windown_rect(self): windown_rect = self.driver.get_window_rect() width = windown_rect['windth'] height = windown_rect['height'] return {'width':width,'height':height} def action_press_moveto(self): '''列表:屏幕操作,按住某位置后,手指移动到另外一个位置,释放手指''' action = TouchAction(self.driver) x1 = int(self.get_windown_rect()['width']/2) y_start = int(self.get_windown_rect()['height'] * 1/5) y_end = int(self.get_windown_rect()['height'] * 4/5) action.press(x = x1,y = y_start).wait(200).move_to(x = x1,y = y_end).release().perform() def action_list_find(self): '''列表:滑动列表数据并找到某个元素''' self.driver.find_elements_by_android_uiautomator( 'new UiScrollable(new UiSelector().scrollable(true).instance(0).scrollIntoView(new Uiselector().text("查找的文案")))' )
def run_main(self, method, url, data, cookie=None, get_cookie=None, header=None, app=None): ''' 执行方法,传递method、url、data参数 ''' #return get_value(url) # base_url = HandleInit.get_value("server","host") hi = HandleInit() log = UserLog().get_log() if 'http' not in url: if app == "jy": ''' 兼容简盈APP ''' base_url = hi.get_value("server", "jyhost") url = base_url + str(url) jyheader = { "Content-Type": "application/json", "app": "jy", "version": "1.0.0" } if method == 'get': res = self.send_get(url, data, cookie, get_cookie, header) log.info("http --》url---->") log.info(url) log.info("http--->data---->") log.info(data) log.info("http--->header--->") log.info(header) log.info("http--->res--->") log.info(res) else: res = self.send_post(url, data, cookie, get_cookie, header) try: res = json.loads(res) except: print("这个结果是一个text") # print("--->",res) return res else: base_url = hi.get_value("server", "host") url = base_url + str(url) if method == 'get': res = self.send_get(url, data, cookie, get_cookie, header) else: res = self.send_post(url, data, cookie, get_cookie, header) try: res = json.loads(res) except: print(" 这个结果是一个text") print(res) return res else: if method == "get": res = self.send_get(url, data, cookie, get_cookie, header) else: res = self.send_post(url, data, cookie, get_cookie, header) return res
class FindElement: def __init__(self, driver: WebDriver, file=None, node=None): self.driver = driver self.log = UserLog() self.logger = self.log.get_log() if file == None: self.filename = parent_dir + '/config/Element.ini' else: self.filename = parent_dir + file self.rean_ini = ReadIni(filename=self.filename, node=node) self.logger.info(self.filename) self.logger.info(node) def get_element(self, key): ''' 获取元素,返回Selenium Element元素 ''' data = self.rean_ini.get_value(key) self.logger.info(key) self.logger.info(data) by = data.split('>')[0] values = data.split('>')[1:] if len(values) == 1: value = data.split('>')[1] elif len(values) > 1: value = values[0] for i in range(1, len(values) - 1): value = value + '>' + values[i] self.logger.info('定位方式' + by + '定位值' + value) # self.logger.info(type(value)) try: if by == 'id': element = WebDriverWait( self.driver, 10).until(lambda x: x.find_element_by_id(value)) is_disappeared = WebDriverWait( self.driver, 30, 1, (ElementNotVisibleException)).until_not( lambda x: x.find_element_by_id(value).is_displayed()) # locator = (By.ID,"value") # WebDriverWait(self.driver,20,0.5).until(EC.presence_of_all_elements_located(locator)) # ele = self.driver.find_element_by_id(value) return element elif by == 'xpath': ele = WebDriverWait( self.driver, 10).until(lambda x: x.find_element_by_xpath(value)) # ele = self.driver.find_element_by_xpath(value) self.logger.info("获取到的元素为--->") self.logger.info(ele) return ele elif by == 'css': # locator = (By.CSS_SELECTOR,"value") # WebDriverWait(self.driver,20,0.5).until(EC.presence_of_all_elements_located(locator)) ele = self.driver.find_element_by_css_selector(value) self.logger.info("获取到的元素为--->") self.logger.info(ele) return ele elif by == 'link_text': WebDriverWait(self.driver, 10).until( expected_conditions.invisibility_of_element( self.driver.find_element_by_link_text(value))) ele = self.driver.find_element_by_link_text(value) return ele elif by == 'name': WebDriverWait(self.driver, 10).until( expected_conditions.invisibility_of_element( self.driver.find_element_by_name(value))) ele = self.driver.find_element_by_name(value) return ele elif by == 'classname': locator = (By.CLASS_NAME, value) WebDriverWait(self.driver, 20, 0.5).until( EC.presence_of_all_elements_located(locator)) ele = self.driver.find_element_by_class_name(value) return ele elif by == 'xpaths': # locator = (By.XPATH,value) # WebDriverWait(self.driver,10,0.5).until( # expected_conditions.presence_of_all_elements_located(locator) # ) # ele = self.driver.find_elements(locator) sleep(4) ele = self.driver.find_elements_by_xpath(value) self.logger.info("获取到的元素为--->") self.logger.info(ele) return ele elif by == 'classnames': locator = (By.CLASS_NAME, value) WebDriverWait(self.driver, 20, 0.5).until( EC.presence_of_all_elements_located(locator)) eles = self.driver.find_elements_by_class_name(value) self.logger.info("获取到的元素为--->") self.logger.info(eles) return eles elif by == 'linktexts': WebDriverWait(self.driver, 20, 0.5).until( expected_conditions.invisibility_of_element( self.driver.find_elements_by_link_text(value))) ele = self.driver.find_elements_by_link_text(value) return ele except: print("11112222") self.logger.info(self.log.iferrorinfo()) def get_childelement(self, elements, key): ''' 获取元素 ''' data = self.rean_ini.get_value(key) by = data.split('>')[0] value = data.split('>')[1] try: if by == 'id': ele = elements.find_element_by_id(value) return ele elif by == 'xpath': ele = elements.find_element_by_xpath(value) return ele except: self.logger.info(self.log.iferrorinfo())
class Teamkitlogintoken(object): def __init__(self): self.url = "https://dnapp.bitkinetic.com/api/v5/login/mplogin" self.body = { "zoneNum": "86", "phone": "15088132074", "password": "******" } self.logger = UserLog().get_log() print("初始化") # 获取指定长度的随机字符串 def __getRandomStr__(self, len): # 获取len位的随机字符串 seed = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" sa = [] for i in range(len): sa.append(random.choice(seed)) randomStr = ''.join(sa) return randomStr def __calcSign__(self, salt, hash, time): for i in salt: hash = ((hash << 5) & 0x7fffffff) + int(ord(i)) + hash return (hash & int(time)) # 获取请求头 # 登录接口需传入的参数 def __getHttpHeader__(self): # 获取当前时间,为秒单位 t = str(int(time.time())) # 获取随机字符串 r = self.__getRandomStr__(32) # 定义当前版本号 version = 2019 sign = str(self.__calcSign__(r, version, t)) header = {'r': r, 't': t, 'sign': sign, 'd-version': str(version)} return header # 执行登录接口调用 def login(self): url = self.url body = self.body header = self.__getHttpHeader__() response = requests.post(url, data=body, headers=header).json() print(response) if response["ret"] == 0: self.logger.info("登录账号信息:" + str(body) + "登录成功") return response else: print(response["msg"]) self.logger.info("login--->") self.logger.info("登录账号信息:" + str(body)) self.logger.info(response) def getMerloginHeader(self): res = self.login() dtToken = res['data']['d-tk'] #获取token iTeams = res['data']['user_info']['team'] #获取iTeam 内的字段 t = str(int(time.time())) # 获取随机字符串 r = self.__getRandomStr__(32) # 定义当前版本号 version = 2019 sign = str(self.__calcSign__(r, version, t)) app = "3001" #3001为Teamkit dnapp = "100001" if len(iTeams) > 1: for iTeam in iTeams: # print(iTeam) if iTeam["iRole"] == 4 or iTeam["iRole"] == 1 or iTeam[ "iRole"] == 2: iManagerTeamId = iTeam["iTeamId"] iManageName = iTeam["sTeamName"] iManegeTeamrole = iTeam["iRole"] header = { 'app': app, "dnapp": dnapp, 'r': r, 't': t, 'sign': sign, 'd-version': str(version), 'd-tk': dtToken, 'teamrole': str(iManegeTeamrole), 'iTeamId': str(iManagerTeamId) } # 成员身份的请求头 elif iTeam["iRole"] == 3: iMermeTeamId = iTeam["iTeamId"] iMerTeamName = iTeam["sTeamName"] iMerTeamrole = iTeam["iRole"] Managerheader = { 'app': app, "dnapp": dnapp, 'r': r, 't': t, 'sign': sign, 'd-version': str(version), 'd-tk': dtToken, 'teamrole': str(iMerTeamrole), 'iTeamId': str(iMermeTeamId) } # 管理员参数的请求头 else: print("未加入团队") # header = {'app': app,"dnapp":dnapp,'r': r, 't': t, 'sign': sign, 'd-version': str(version),'d-tk':dtToken,'teamrole':str(teamrole),'iTeamId':iTeamId} return header, Managerheader
def setUp(self): log = UserLog() self.logging = log.get_log() self.driver = webdriver.Chrome() self.url = "http://192.168.0.134:9000/ECShop_V2.7.2_UTF8_Release0604/upload66/user.php"
def setUpClass(cls): cls.user_log = UserLog() cls.user_log.get_logger().info("类前置")