Example #1
0
class CheckBox:
    click = Click()
    check_element = Checkelement()
    get_element = GetElement()

    def CheckBoxClick(self, driver, element):
        element_name = element['element_name']
        element_type = element['type']
        loc_type = element['loc_type']
        locator = element['locator']
        all_handles = driver.window_handles
        # print(all_handles)
        if self.click.clickelement(driver, (eval(loc_type), locator), element_name):
            element_process = driver.find_element(eval(loc_type), locator)
            # if not element_process.is_selected():
            # 勾选或取消勾选复选框
            # ..........后续添加校验...........
            # if element_process.is_selected():
            #     return True
            # elif element_type == "check_box":
            #     logging.error("复选框:" + element_name + "点击后未被选中")
            # else:
            #     logging.error("单选按钮:" + element_name + "点击后未被选中")
            return True

        else:
            return False
Example #2
0
class Click:

    checkelement = Checkelement()
    getelement = GetElement()

    def clickelement(self, driver, locator, Description):
        #locator须是tuple  (loc_type,locator)
        all_handles = driver.window_handles
        # print(all_handles)
        if len(all_handles) > 1:
            driver.switch_to.window(all_handles[-1])  # 切换到最新窗口操作
        try:
            if (self.checkelement.wait_element(driver, 60, locator)):
                ele = driver.find_element(locator[0], locator[1])
                self.getelement.scrollToElement(driver, locator)
                time.sleep(2)
                # WebDriverWait(driver,5).until(EC.element_to_be_clickable(locator)).click()
                ele.click()
                # ActionChains(driver).move_to_element(ele).click().perform()
                time.sleep(1)
                return True
            else:
                logging.error("没有加载元素:" + Description)
                return False

        except Exception as e:
            logging.error("点击元素" + Description + "报错;" + str(e))
            return False
Example #3
0
class Input:
	click = Click()
	check_element = Checkelement()
	get_element = GetElement()
	send_keys = SendKeys()


	# element是个字典
	def InputKeys(self, driver,element,input_keys):
		element_name = element['element_name']
		element_type = element['type']
		loc_type = element['loc_type']
		locator = element['locator']
		wait_parameter = (eval(loc_type),locator)
		all_handles = driver.window_handles
		# print(all_handles)
		if len(all_handles)>1:
			driver.switch_to.window(all_handles[-1])  # 切换到新窗口
		if self.check_element.wait_element(driver, 60, wait_parameter):
			time.sleep(1)
			try:
				# self.click.clickelement(driver,wait_parameter,element_name)
				# 文件上传,直接赋值:地址值
				# Actions(driver).sendKeys(Keys.ENTER).perform()
				self.send_keys.send_keys(driver,wait_parameter,input_keys,element_name)
				js2 = "arguments[0].value="+ input_keys
				driver.execute_script(js2,driver.find_element(eval(loc_type),locator))
			except Exception as e:
				logging.error(str(e))
				logging.error("复选框:" + element_name + "不可被操作")
				return False
			return True
		else:
			print("找不到元素")
			return False

	def InputCheck(self,driver,element):
		input_check=False
		time1=0
		# 点击此输入框返回值
		self.click.clickelement(driver,element.getElemetlocator(),element.get_elementName())
		time.sleep(1)
		# 校验是否有值
		elementExist=self.check_element.isvalue(driver,60,element.getElemetlocator(),element.get_elementName());
		if elementExist:
			input_check=True

		else:
			while time1<30:
				time1+=1
				if self.check_element.isvalue(driver,60,element.getElemetlocator(),element.get_elementName()):
					input_check=True
					break
		return input_check
Example #4
0
class SendKeys:

    check_element = Checkelement()
    get_element = GetElement()

    def send_keys(self, driver, locator, words, description):
        try:
            if self.check_element.wait_element(driver, 60, locator):
                self.get_element.scrollToElement(driver, locator)
                driver.find_element(locator[0], locator[1]).send_keys(words)
                return True
            else:
                return False
                logging.error("未找到元素:" + description)

        except Exception as e:
            return False
            logging.error("点击元素" + description + "报错;" + str(e))
Example #5
0
class Select:

	check_ele =  Checkelement()
	get_element = GetElement()
	click = Click()

	def usual_select(self, driver,element):
		name = element['element_name']
		loc_type = element['loc_type']
		locator = element['locator'].split('|')
		print(locator)
		all_handles = driver.window_handles
		# print(all_handles)
		if len(all_handles) > 1:
			driver.switch_to.window(all_handles[-1])  # 切换到新窗口
		try:
			# 点击按钮
			self.click.clickelement(driver, (eval(loc_type), locator[0]), name)
			# 等待下拉列表数据加载
			if self.check_ele.wait_element(driver, 60, (eval(loc_type), locator[1])):
				time.sleep(0.5)
				# 选择第一个点击
				loc = self.get_element.get_eleloc(driver, (eval(loc_type), locator[1]),'1')
				self.click.clickelement(driver, (By.XPATH, loc), name)
				return True
			else:
				logging.error(locator[1] + ":下拉列表未加载")
				return False
		except Exception as e:
			logging.error(str(e))
			return False

	def dropDownManage(self, driver, element):
		# 点击按钮
		self.click.clickelement(driver,element.getElemetlocator(),element.getElementName())
		# 等待下拉列表数据加载
		if self.check_ele.wait_element(driver,60,element.getElemetlocator2()):
			time.sleep(1)
			self.click.clickelement(driver,element.getElemetlocator2(),element.getElementName())
			return True

		else:
			logging.error(element.getElementName()+":下拉列表未加载")
			return False
Example #6
0
class Clear:

    checkelement = Checkelement()
    getelement = GetElement()

    # locator须是tuple  (loc_type,locator)
    def clearelement(self, driver, locator, description):
        try:
            if self.checkelement.wait_element(driver, 60, locator):
                self.getelement.scrollToElement(driver, locator)
                time.sleep(1)
                driver.find_element(locator).clear()
                return True
            else:
                logging.error("未找到元素:" + description)
                return False

        except Exception as e:
            logging.error("清除元素" + description + "值报错;" + str(e))
            return False
Example #7
0
class DoubleClick:
    check_element = Checkelement()
    get_element = GetElement()
    scroll = Scroll()

    def click_element(self, driver, locator, description):
        # locator须是tuple  (loc_type,locator)
        all_handles = driver.window_handles
        # print(all_handles)
        if len(all_handles) > 1:
            driver.switch_to.window(all_handles[-1])  # 切换到新窗口
        try:
            if self.check_element.wait_element(driver, 60, locator):
                self.scroll.scrollToElement(driver, locator)
                time.sleep(1)
                ActionChains(driver).double_click(locator).perform()
                return True
            else:
                return False
                logging.error("没有加载元素:" + description)
        except Exception as e:
            return False
            logging.error("双击元素:" + description + "报错;" + str(e))
Example #8
0
class RichText:
    check_ele = Checkelement()
    get_element = GetElement()
    click = Click()

    def input_content(self, driver, wtime, locator):
        loc_type = locator[0]
        locator_ = locator[1].split('|')
        locator_frame = locator_[0]
        locator_content = locator_[1]
        all_handles = driver.window_handles
        # print(all_handles)
        if len(all_handles) > 1:
            driver.switch_to.window(all_handles[-1])  # 切换到新窗口
        content = '''
            This is a test content!

            This is a test content!

            This is a test content!
        '''
        try:
            if self.check_ele.wait_element(driver, 60,
                                           (loc_type, locator_frame)):
                iframe = driver.find_element(loc_type, locator_frame)
                driver.switch_to.frame(iframe)
                time.sleep(0.5)
                driver.find_element(loc_type,
                                    locator_content).send_keys(content)
                return True
            else:
                logging.error('没找到frame\n')
                return False
        except Exception as e:
            logging.error(str(e))
            return False
Example #9
0
class ExecutorSingleCase:
    input = Input()
    select = Select()
    check_box = CheckBox()
    click = Click()
    doubleclick = DoubleClick()
    date = DateEntry()
    checkelement = Checkelement()
    getelement = GetElement()
    con = ConfigParser()
    get_date = GetDate()
    rich_text = RichText()
    par_exe = Parameter()
    con = ConfigParser()

    def element_executor(self, driver, case_module, list_element, config_path, screen_path, log_path, log_info,
                         log_error):  # access_token:
        executor = True
        for element in list_element:
            # 转换元素格式
            ele_str = element.replace('\n', '')
            str0 = "'" + ele_str[0]
            str1 = ele_str[len(ele_str) - 1] + "'"
            list_0 = str0
            for i in range(1, len(ele_str) - 1):
                str2 = ele_str[i]
                if ele_str[i] == ':' or ele_str[i] == ',':
                    str2 = "'" + ele_str[i]+"'"
                list_0 += str2
            list_element = '{' + list_0 + str1 + '}'
            element_dic = ast.literal_eval(list_element)
            element_name = element_dic['element_name']
            element_type = element_dic['type']
            loc_type = None
            locator = None
            try:
                loc_type = element_dic['loc_type']
                locator = element_dic['locator']
                print('本次操作的元素:%s,%s' % (element_name, locator))
            except Exception as e:
                logging.info('元素:'+element_name+'没有此属性')
            # 非校验的input,输入值
            if element_type == 'input':
                if 'input_val' not in element_dic.keys():
                    input_keys = ''
                elif self.con.get_config(config_path, case_module, element_dic['input_val']) == -1:
                    input_keys = element_dic['input_val']
                    #创建一些特殊数据名称后加了 时间戳
                    if 'timestap' in input_keys:
                        stime = str(int(time.time()))
                        input_keys = input_keys.replace('timestap',stime)
                        self.con.write_config(config_path, case_module, element_dic['input_val'], input_keys)
                else:
                    input_keys = self.con.get_config(config_path, case_module, element_dic['input_val'])
                    if 'timestap' in input_keys:
                        stime = str(int(time.time()))
                        input_keys = input_keys.replace('timestap', stime)
                        # 替换完参数要保存到地址去
                        self.con.write_config(config_path, case_module, element_dic['input_val'], input_keys)

                if not self.input.InputKeys(driver, element_dic, input_keys):
                    executor = False
                    take_screen_shot(driver, screen_path, element_name)
                    log_error.logger.error(element_name + ":输入失败")

            # 日期输入
            elif element_type == 'date':
                if not self.date.date_input(driver, element_dic):
                    executor = False
                    log_error.logger.error(element_name + ":日期输入失败")
                    take_screen_shot(driver, screen_path, element_name)


            # 日期输入
            elif element_type == 'time':
                if not self.date.time_input(driver, element_dic):
                    executor = False
                    log_error.logger.error(element_name + ":时间输入失败")
                    take_screen_shot(driver, screen_path, element_name)


            # Button Link 执行点击操作
            elif element_type == 'button' or element_type == 'link' or element_type == 'radio':
                if not self.click.clickelement(driver, (eval(loc_type), locator), element_name):
                    executor = False
                    log_error.logger.error(element_name + ":点击操作失败")
                    take_screen_shot(driver, screen_path, element_name)


            # 支持模糊查询的Select 执行下拉列表选择操作
            elif element_type == 'fuzzy_query_select':
                if not self.select.dropDownManage(driver, element_dic):
                    executor = False
                    log_error.logger.error(element_name + "选择数据失败")
                    take_screen_shot(driver, screen_path, element_name)


            # 不带模糊查询的select, 执行下拉列表选择操作
            elif element_type == 'select':
                if not self.select.usual_select(driver, element_dic):
                    executor = False
                    log_error.logger.error(element_name + "选择数据失败")
                    take_screen_shot(driver, screen_path, element_name)


            # Checkbox、Radio,执行点击操作
            elif element_type == 'check_box':
                if not self.check_box.CheckBoxClick(driver, element_dic):
                    executor = False
                    log_error.logger.error(element_name + "点击操作失败")
                    take_screen_shot(driver, screen_path, element_name)


            # DoubleClick,进行双击操作
            elif element_type == 'double_click':
                if not self.doubleclick.check_element(driver, (eval(loc_type), locator), element_name):
                    executor = False
                    log_error.logger.error(element_name + "点击操作失败")
                    take_screen_shot(driver, screen_path, element_name)


            # Scroll用于滚动至页面元素可见
            elif element_type == 'scroll':
                if not self.getelement.scrollToElement(driver, (eval(loc_type), locator)):
                    executor = False

            elif element_type == 'list_click':  # 在列表获取需要的元素,并点击操作
                # 从配置中服务
                # li_num = int(self.con.get_config(config_path, case_module, element_dic['li_num']))
                if 'list_num' not in element_dic.keys():
                    li_num = '-1'
                else:
                    li_num = element_dic['list_num']
                loc = self.getelement.get_eleloc(driver, (eval(loc_type), locator), li_num)
                if loc:
                    self.click.clickelement(driver, (By.XPATH, loc), element_name)
                else:
                    executor = False
                    log_error.logger.error(element_name + "获取列表元素失败")
                    take_screen_shot(driver, screen_path, element_name)

            elif element_type == 'list_check':  # 在列表获取需要的元素,并行校验
                # 从配置中服务
                if 'list_num' not in element_dic.keys():
                    li_num = '-1'
                else:
                    li_num = element_dic['list_num']
                check_val = self.con.get_config(config_path, case_module, element_dic['check_val'])
                loc = self.getelement.get_eleloc(driver, (eval(loc_type), locator), li_num)
                if loc is not None:
                    if not self.checkelement.contains_text(driver, 80, (By.XPATH, loc), check_val):
                        executor = False
                        log_error.logger.error(element_name + "没找到操作的元素")
                        take_screen_shot(driver, screen_path, element_name)
                else:
                    executor = False
                    log_error.logger.error(element_name + "获取列表元素失败,校验失败")
                    take_screen_shot(driver, screen_path, element_name)

            # 判断元素是否为富文本
            elif element_type == 'rich_text':
                if not self.rich_text.input_content(driver, 80, (eval(loc_type), locator)):
                    executor = False
                    log_error.logger.error(element_name + "输入内容失败")
                    take_screen_shot(driver, screen_path, element_name)
            # 直接进入一个页面
            elif element_type == 'open':
                url = self.con.get_config(config_path, case_module, element_dic['url'])
                if not self.par_exe.enter_page(driver,url):
                    executor = False
                    log_error.logger.error("进入页面失败:%s"%url)
                    take_screen_shot(driver, screen_path, element_name)

            # 判断元素值是否为给定的值
            elif element_type == 'text_tobe':
                check_value = element_dic['text']
                if not self.checkelement.WaitelementtextToBe(driver, 80, (eval(loc_type), locator), check_value):
                    executor = False
                    log_error.logger.error(element_name + "与给定值:%s不相同"%check_value)
                    take_screen_shot(driver, screen_path, element_name)
                    # self.log.WriteWronglog(driver, screen_path,"未找到值为:"+check_value+"的元素")


            # 判断元素值是不为给定的值
            elif element_type == 'text_notbe':
                check_text = element_dic['text']
                print(check_text)
                if not self.checkelement.WaitelementtextNotToBe(driver, 60, (eval(loc_type), locator), check_text):
                    log_error.logger.error(element_name + "与给定值:%s相同了"%check_text)
                    take_screen_shot(driver, screen_path, element_name)
                    executor = False

            # 判断元素值是否包含给定的值
            elif element_type == 'contains_text':
                text = None
                if 'text' not in element_dic.keys():
                    text = ''
                elif self.con.get_config(config_path, case_module, element_dic['text']) == -1:
                    text = element_dic['text']
                else:
                    text = self.con.get_config(config_path, case_module, element_dic['text'])
                if not self.checkelement.contains_text(driver, 60,(eval(loc_type), locator),text):
                    executor = False
                    log_error.logger.error(element_name + "校验失败")
                    take_screen_shot(driver, screen_path, element_name)

            # 判断数据不包含给定值
            elif element_type == 'no_contains_text':
                text = None
                if 'text' not in element_dic.keys():
                    text = ''
                elif self.con.get_config(config_path, case_module, element_dic['text']) == -1:
                    text = element_dic['text']
                else:
                    text = self.con.get_config(config_path, case_module, element_dic['text'])

                if not self.checkelement.not_contains_text(driver, 30, (eval(loc_type), locator),text):
                    executor = False
                    log_error.logger.error(element_name + "校验失败")
                    take_screen_shot(driver, screen_path, element_name)

            # 判断元素是否存在
            elif element_type == 'element_exist':
                if not self.checkelement.wait_element(driver, 60, (eval(loc_type), locator)):
                    executor = False

            # 判断元素是否不存在
            elif element_type == 'element_noexist':
                a = self.checkelement.wait_noelement(driver, 60, (eval(loc_type), locator))
                print(a)
                if not a:
                    # self.log.WriteWronglog(driver, screen_path, element_name + "元素是存在的")
                    executor = False

            # 红绿框
            elif element_type == 'AlertContainer':
                if not self.getelement.Getalert(driver, element_name):
                    # self.log.WriteWronglog(driver, screen_path, "提交失败")
                    executor = False
            else:
                # 其他可能出现的操作
                print('其他类型')
        if executor is True:
            print(element_name+' 操作成功~~~')
        return executor