Ejemplo n.º 1
0
 def config_read(section, key):
     """从配置文件中读值"""
     # 读取seciton下key的value
     config.read(config_path, encoding='utf-8-sig')
     config_get = config.get(section, key)
     log1.info('在section:%s下读取%s的值' % (section, key))
     return config_get
Ejemplo n.º 2
0
 def use_js(self, js):
     """调用js"""
     # noinspection PyBroadException
     try:
         self.driver.execute_script(js)
         log1.info('js执行成功,js内容为:%s' % js)
     except BaseException:
         log1.error('js执行报错', exc_info=1)
Ejemplo n.º 3
0
 def switch_ifarme(self, selector):
     """切换farm"""
     element = self.find_element(selector)
     # noinspection PyBroadException
     try:
         self.driver.switch_to.frame(element)
         log1.info('切换frame成功')
     except BaseException:
         log1.error('切换frame报错', exc_info=1)
Ejemplo n.º 4
0
    def send(self, selector, value):
        element = self.find_element(selector)  # 调用封装的定位元素方法
        element.clear()

        try:
            element.send_keys(value)
            log1.info('输入的内容%s' % value)
        except BaseException:
            log1.error('输入内容出错')
            self.get_img()
Ejemplo n.º 5
0
 def get_img(self):
     """截图"""
     path = os.path.join(getcwd.getcwd(), 'screenshots\\')  # 拼接截图保存路径
     rq = time.strftime('%Y%m%d%H%M',
                        time.localtime(time.time()))  # 按格式获取当前时间
     screen_name = path + rq + '.png'  # 拼接截图名称
     try:
         self.driver.get_screenshot_as_file(screen_name)
         log1.info("截图成功:%s" % screen_name)
     except BaseException:
         log1.error("截图失败:%s" % screen_name)
Ejemplo n.º 6
0
 def type(self, selector, value):
     """输入内容"""
     element = self.find_element(selector)
     element.clear()
     log1.info('清空输入内容')
     # noinspection PyBroadException
     try:
         element.send_keys(value)
         log1.info('输入的内容:%s' % value)
     except BaseException:
         log1.error('内容输入报错', exc_info=1)
         self.get_img()
Ejemplo n.º 7
0
 def get_img(self):
     """截图"""
     path = os.path.join(getcwd.get_cwd(), 'screenshots/')  # 拼接截图保存路径
     rq = time.strftime('%Y%m%d%H%M',
                        time.localtime(time.time()))  # 按格式获取当前时间
     screen_name = path + rq + '.png'  # 拼接截图文件名
     # noinspection PyBroadException
     try:
         self.driver.get_screenshot_as_file(screen_name)
         log1.info("截图保存成功")
     except BaseException:
         log1.error("截图失败", exc_info=1)
Ejemplo n.º 8
0
 def config_write(section, key=None, value=None):
     """往配置文件写入"""
     # 在section下写入key, value
     if key is not None and value is not None:
         config.set(section, key, value)
         log1.info('在section:%s下新增%s=%s' % (section, key, value))
         with open(config_path, 'w', encoding='utf-8') as f:
             config.write(f)
     else:
         # 新增section
         config.add_section(section)
         log1.info("新增section:%s" % section)
         with open(config_path, 'w', encoding='utf-8') as f:
             config.write(f)
Ejemplo n.º 9
0
 def config_delete(section, key=None):
     """从配置文件中删除"""
     # 删除section下对应key, value
     if key is not None:
         config.remove_option(section, key)
         log1.info('删除section:%s下%s和他的值' % (section, key))
         with open(config_path, 'w', encoding='utf-8') as f:
             config.write(f)
     else:
         # 删除section
         config.remove_section(section)
         log1.info('删除section:%s' % section)
         with open(config_path, 'w', encoding='utf-8') as f:
             config.write(f)
Ejemplo n.º 10
0
 def click(self, selector):
     """点击元素"""
     element = self.find_element(selector)
     # noinspection PyBroadException
     try:
         element.click()
         log1.info('点击元素成功')
     except BaseException:
         display = self.isdisplayed(element)
         if display is True:
             self.my_sleep(3)
             element.click()
             log1.info('点击元素成功')
         else:
             self.get_img()
             log1.error('点击元素报错', exc_info=1)
Ejemplo n.º 11
0
 def config_write(self, key=None, value=None, section=None):
     """往配置文件写入键值"""
     switch = config.get('environment', 'switch')
     if section == None and switch == str(0):
         section = 'test'
     elif section == None and switch == str(1):
         section = 'prod'
     if key is not None and value is not None:
         config.set(section, key, value)
         log1.info('在section:%s下写入%s=%s' % (section, key, value))
         with open(config_path, 'w', encoding='utf-8') as f:
             config.write(f)
     else:
         config.add_section(section)
         log1.info('新增section:%s' % section)
         with open(config_path, 'w', encoding='utf-8') as f:
             config.write(f)
Ejemplo n.º 12
0
 def config_delete(self, key=None, section=None):
     '''删除配置文件字段'''
     switch = config.get('environment', 'switch')
     if section == None and switch == str(0):
         section = 'test'
     elif section == None and switch == str(1):
         section = 'prod'
     if key is not None:
         config.remove_option(section, key)
         log1.info('删除section:%s下key为:%s的记录' % (section, key))
         with open(config_path, 'w', encoding='utf-8') as f:
             config.write(f)
     else:
         config.remove_section(section)
         log1.info('删除section:%s' % section)
         with open(config_path, 'w', encoding='utf-8') as f:
             config.write(f)
Ejemplo n.º 13
0
 def switch_menue(self, parent_element, seconds_element, target_element):
     """三级菜单切换"""
     self.framework_sleep(2)
     try:
         self.driver.switch_to_default_content()
         self.click(parent_element)
         log1.info("成功点击第一级菜单")
         self.click(seconds_element)
         log1.info("成功点击第二级菜单")
         self.click(target_element)
         log1.info("成功点击第三级菜单")
     except:
         log1.info("切换菜单报错")
Ejemplo n.º 14
0
 def find_element(self, selector):
     """定位元素"""
     by = selector[0]
     value = selector[1]
     element = None
     if by in [
             'id', 'name', 'class', 'tag', 'link', 'plink', 'css', 'xpath',
             'andriod_uiautomator'
     ]:
         # noinspection PyBroadException
         try:
             if by == 'id':
                 element = self.driver.find_element_by_id(value)
             elif by == 'name':
                 element = self.driver.find_element_by_name(value)
             elif by == 'class':
                 element = self.driver.find_element_by_class_name(value)
             elif by == 'tag':
                 element = self.driver.find_element_by_tag_name(value)
             elif by == 'link':
                 element = self.driver.find_element_by_link_text(value)
             elif by == 'plink':
                 element = self.driver.find_element_by_partial_link_text(
                     value)
             elif by == 'css':
                 element = self.driver.find_element_by_css_selector(value)
             elif by == 'xpath':
                 element = self.driver.find_element_by_xpath(value)
             elif by == 'andriod_uiautomator':
                 element = self.driver.find_element_by_andriod_uiautomator(
                     value)
             else:
                 log1.error('没有找到元素')
             log1.info('元素定位成功。定位方式:%s,使用的值%s:' % (by, value))
             return element
         except NoSuchElementException:
             log1.error("报错信息:", exc_info=1)
             self.get_img()  # 调用截图
     else:
         log1.error('输入的元素定位方式错误')
Ejemplo n.º 15
0
 def get(self, url, params=None, headers=None, files=None):
     '''封装get方法,return响应码和相应内容'''
     try:
         r = requests.get(url, params=params, headers=headers, files=files)
         log1.info("请求的内容:%s" % params)
         status_code = r.status_code  # 获取返回的状态码
         log1.info("获取返回的状态码:%d" % status_code)
         response_json = r.json()  # 响应内容,json类型转化成python数据类型
         log1.info("响应内容:%s" % response_json)
         reurl = r.url  # 获取返回的状态码
         log1.info("url为:%s" % reurl)
         return status_code, response_json, reurl
     except BaseException as e:
         log1.error("请求失败!", exc_info=1)
Ejemplo n.º 16
0
 def test_weather(self):
     '''查询天气'''
     case_name = '查询天气'
     log1.info("执行测试用例:%s" % case_name)
     try:
         weather = test_requests()  # 初始化测试基类的实例
         url = Config.config_read('weathere', 'url')  # 获取配置文件中的url
         city = Config.config_read('weathere', 'city')  # 获取配置文件中的crty
         status_code, response_json, reurl = weather.get(
             url + city)  # 调用封装的get方法,接收状态码和相应内容
         message = weather.getdict(response_json,
                                   'message')  # 调用迭代字典方法,获得message字段的值
         test1 = self.assertEqual(status_code, 200)  # 断言状态码等于200
         print(test1)
         test2 = self.assertEqual(message,
                                  'Success !')  # 断言message字段的值等于'Success !'
         print(test2)
         if test1 == None and test2 == None:  # 如果两个断言结果都等于None
             log1.info("测试通过")
     except BaseException as f:
         log1.error("测试用例执行出错: %s" % case_name, exc_info=1)
         raise
Ejemplo n.º 17
0
 def open_browser(self):
     url = self.config_get('amazon', 'url')
     log1.info('load url:%s' % url)
     driver = webdriver.Chrome()
     log1.info('Open chrome')
     driver.get(url)
     driver.maximize_window()
     driver.implicitly_wait(10)
     log1.info('sleep 10 seconds')
     return driver
Ejemplo n.º 18
0
 def post(self, url, data=None, headers=None, files=None):
     '''封装post请求,return响应码和响应内容'''
     try:
         r = requests.post(url, data=data, headers=headers, files=files)
         log1.info("请求的内容:%s" % data)
         status_code = r.status_code  # 获取返回的状态码
         log1.info("获取返回的状态码:%d" % status_code)
         response_json = r.json()  # 响应内容,json类型转化成python数据类型
         log1.info("响应内容:%s" % response_json)
         return status_code, response_json  # 返回响应码,响应内容
     except BaseException as e:
         log1.error("请求失败!", exc_info=1)
Ejemplo n.º 19
0
 def post_json(self, url, data=None, headers=None):
     '''封装post方法,并用json格式传值,return响应码和响应内容'''
     try:
         data = json.dumps(data).encode('utf-8')  # python数据类型转化为json数据类型
         r = requests.post(url, data=data, headers=headers)
         log1.info("请求的内容:%s" % data)
         status_code = r.status_code  # 获取返回的状态码
         log1.info("获取返回的状态码:%d" % status_code)
         response = r.json()  # 响应内容,json类型转化成python数据类型
         log1.info("响应内容:%s" % response)
         return status_code, response  # 返回响应码,响应内容
     except BaseException as e:
         log1.error("请求失败!", exc_info=1)
Ejemplo n.º 20
0
 def switch_menue(self, parentelement, secelement, targetelement):
     """三级菜单切换"""
     self.my_sleep(3)
     # noinspection PyBroadException
     try:
         self.driver.switch_to_default_content()
         self.click(parentelement)
         log1.info('成功点击一级菜单:%s' % parentelement)
         self.click(secelement)
         log1.info('成功点击二级菜单:%s' % secelement)
         self.click(targetelement)
         log1.info('成功点击三级菜单:%s' % targetelement)
     except BaseException:
         log1.error('切换菜单报错', exc_info=1)
Ejemplo n.º 21
0
from selenium import webdriver
from framework.base_page import BasePage
from logs.log import log1

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
s = driver.window_handles

kw = ('id', 'kw')

base_driver = BasePage(driver)
base_driver.send(kw, 'selenium+python')
base_driver.framework_sleep(2)

su = ('id', 'su')
base_driver.click(su)
base_driver.get_img()
base_driver.framework_sleep(3)

log1.info(base_driver.get_title())

base_driver.framework_quit()
Ejemplo n.º 22
0
 def implicitly_wait(self, times):
     """隐式等待"""
     self.driver.implicitly_wait(times)
     log1.info('隐式等待%d秒' % times)
Ejemplo n.º 23
0
 def get_title(self):
     """获取title"""
     title = self.driver.title
     log1.info("当前窗口的title是%s" % title)
     return title
Ejemplo n.º 24
0
 def framework_quit(self):
     self.driver.quit()
     log1.info("关闭浏览器")
Ejemplo n.º 25
0
 def quit(self):
     self.driver.quite()
     log1.info('close browser')
Ejemplo n.º 26
0
from logs.log import log1

try:
    log1.info("测试")
except:
    log1.error("123")
Ejemplo n.º 27
0
 def open_browser(self):
     browser = self.config_get('browser', 'environment')
     log1.info('读取浏览器配置')
     url = self.config_get('url')
     log1.info('读取url:%s' % url)
     try:
         if browser == str(0):
             self.driver = webdriver.Chrome()
             log1.info('打开的浏览器为Chrome')
         elif browser == str(1):
             self.driver = webdriver.Firefox()
             log1.info('打开的浏览器为Firefox')
         self.driver.get(url)
         self.driver.maximize_window()
         log1.info('浏览器最大化')
         self.driver.implicitly_wait(10)
         log1.info('设置静态等待时间10秒')
         return self.driver
     except BaseException:
         log1.error('浏览器打开报错')
Ejemplo n.º 28
0
 def framework_sleep(secondes):
     """"强制等待"""
     time.sleep(secondes)
     log1.info("暂停%d秒" % secondes)
Ejemplo n.º 29
0
 def open_browser(self, browser):
     log1.info('读取浏览器配置')
     url = Config.config_read('test', 'url')
     log1.info('读取url:%s' % url)
     try:
         if browser == 0:
             abspath = os.path.abspath(r"F:\m2\chromedriver.exe")
             self.driver = webdriver.Chrome(abspath)
             log1.info('打开的浏览器为chrome')
         elif browser == 1:
             # abspath = os.path.abspath(r"F:\m2\chromedriver.exe")
             self.driver = webdriver.Firefox()
             log1.info('打开的浏览器为Firefox')
         elif browser == 2:
             # abspath = os.path.abspath(r"F:\m2\chromedriver.exe")
             self.driver = webdriver.ie()
             log1.info('打开的浏览器为ie')
         self.driver.get(url)
         self.driver.maximize_window()
         log1.info('浏览器最大化')
         self.driver.implicitly_wait(10)
         log1.info('设置静态等待时间10秒')
         return self.driver
     except BaseException:
         log1.error('浏览器打开报错')
Ejemplo n.º 30
0
def mail():
    try:
        # 创建一个带附件的实例
        message = MIMEMultipart()
        message['From'] = formataddr(['发件人姓名',
                                      sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
        log1.info('发件人邮箱:%s' % sender)
        message['To'] = formataddr(['收件人姓名',
                                    addressed_eamil])  # 括号里的对应收件人邮箱昵称、收件人邮箱账号
        log1.info('收件人邮箱:%s' % addressed_eamil)
        message['Subject'] = rq + "xxxUI自动化测试报告"  # 邮件的主题,也可以说是标题

        # 邮件正文内容
        message.attach(MIMEText('附件为xxxUI自动化测试报告', 'plain', 'utf-8'))

        # 构造附件1
        att1 = MIMEText(open(file, 'rb').read(), 'base64', 'utf-8')
        log1.info('读取附件')
        att1["Content-Type"] = 'application/octet-stream'
        # filename是附件名,附件名称为中文时的写法
        att1.add_header("Content-Disposition",
                        "attachment",
                        filename=("gbk", "", "钱东敏测试自动化框架报告.html"))
        # 附件名称非中文时的写法
        # att["Content-Disposition"] = 'attachment; filename="test.html")'
        message.attach(att1)
        log1.info('添加附件')

        server = smtplib.SMTP_SSL(
            "smtp.yeah.net", 465)  # 发件人邮箱中的SMTP服务器,ssl端口一般为465, 非ssl一般端口是25
        log1.info('连接yeah邮箱smtp服务')
        server.login(sender, password)  # 括号中对应的是发件人邮箱账号、邮箱密码
        log1.info('连接成功')
        server.sendmail(sender, addressed_eamil,
                        message.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
        server.quit()  # 关闭连接
        log1.info("邮件发送成功")
    except Exception:
        log1.error("邮件发送失败", exc_info=1)