Exemple #1
0
    def file_upload(self, locator, file_path):
        ''' 文件上传 '''
        try:
            mfile = self.find(locator)
            # 点击
            mfile.click()
            # #方法2 python3.8有异常
            time.sleep(2)
            import pyautogui
            pyautogui.write(file_path)
            time.sleep(2)
            pyautogui.press('enter', 2)
            time.sleep(3)

            ##方法1
            # from pywinauto import Desktop
            # from pywinauto import Desktop
            # app = Desktop()
            # # 窗口
            # dialog = app['打开']  # 根据名字找到弹出窗口
            # # 窗口上的控件
            # time.sleep(1)
            # dialog["Edit"].type_keys(file_path)  # 在输入框中输入值
            # time.sleep(2)
            # dialog["Button"].click()
            # time.sleep(2)
            # 1/文件上传失败时,强制等待时间可以增多去调试验证; 2/打断点时需要断点到上传后打,否则有可能失败
        except Exception as err:
            self.save_screenshot()
            do_log.error(f"上传文件失败:{err}")
        else:
            return self
Exemple #2
0
    def upload(self, filePath, img_desc, browser_type="chrome", wait_time=5):
        do_log.info("'{}' 开始上传文件 '{}'".format(img_desc, filePath))
        try:
            if browser_type == "chrome":
                title = "打开"
            else:
                title = ""
            # 找元素
            # 一级窗口"#32770","打开"
            dialog = win32gui.FindWindow("#32770", title)
            #
            ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, "ComboBoxEx32",
                                                 None)  # 二级
            comboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, "ComboBox",
                                             None)  # 三级
            # 编辑按钮
            edit = win32gui.FindWindowEx(comboBox, 0, 'Edit', None)  # 四级
            # 打开按钮
            # button = win32gui.FindWindowEx(dialog, 0, 'Button', "打开(O)")  # 二级
            button = win32gui.FindWindowEx(dialog, 0, 'Button', None)

            # 往编辑当中,输入文件路径 。
            win32gui.SendMessage(edit, win32con.WM_SETTEXT, None,
                                 filePath)  # 发送文件路径
            time.sleep(wait_time)
            win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1,
                                 button)  # 点击打开按钮
            do_log.info("{}上传 '{}' 成功".format(img_desc, filePath))
            time.sleep(wait_time)
        except:
            do_log.error("{}上传 '{}' 失败".format(img_desc, filePath))
            raise
Exemple #3
0
 def click_element(self, locator):
     """点击某个元素"""
     try:
         e = self.wait_element_clickable(locator)
         e.click()
         return self
     except Exception as err:
         self.save_screenshot()
         do_log.error(f"元素定位失败:{err}")
Exemple #4
0
 def click_element(self, loc, img_desc, timeout=30, frequency=0.5):
     do_log.info("在 '{}' 点击 ' {}' 元素".format(img_desc, loc))
     try:
         self.find_element(loc, img_desc, timeout, frequency).click()
         do_log.info("在 '{}' 点击元素成功".format(img_desc))
     except:
         do_log.error("在 '{}' 点击元素失败".format(img_desc))
         self.save_error_screenshot(img_desc)
         raise
Exemple #5
0
 def wait_element_present(self, locator, timeout=20, poll_frequency=0.2):
     """等待元素被加载"""
     wait = WebDriverWait(self.driver, timeout, poll_frequency)
     try:
         e = wait.until(expected_conditions.presence_of_element_located(locator))
         return e
     except Exception as err:
         self.save_screenshot()
         do_log.error(f"元素定位失败:{err}")
Exemple #6
0
 def move_to_ele_with_click(self, loc, img_desc, timeout=30, frequency=5):
     do_log.info("鼠标悬浮并点击 '{}' ,元素值为 '{}'".format(img_desc, loc))
     ele = self.find_element(loc, img_desc, timeout, frequency)
     try:
         ActionChains(self.driver).move_to_element(ele).click(ele).perform()
         do_log.info("悬浮到 '{}' 元素成功".format(img_desc))
     except:
         do_log.error("悬浮到 '{}' 元素失败".format(img_desc))
         self.save_error_screenshot(img_desc)
         raise
Exemple #7
0
 def find(self, locator):
     """查找元素"""
     try:
         e = self.driver.find_element(*locator)
     except Exception as err:
         # 没有找到元素
         do_log.error(f"元素定位失败:{err}")
         self.save_screenshot()
     else:
         return e
Exemple #8
0
 def right_click_ele(self, loc, img_desc, timeout=30, frequency=5):
     do_log.info("右击 '{}' ,元素值为 '{}' ".format(img_desc, loc))
     ele = self.find_element(loc, img_desc, timeout, frequency)
     try:
         ActionChains(self.driver).context_click(ele).perform()
         do_log.info("右击 '{}' 元素成功".format(img_desc))
     except:
         do_log.error("右击 '{}' 元素失败".format(img_desc))
         self.save_error_screenshot(img_desc)
         raise
Exemple #9
0
 def find_element(self, loc, img_desc, timeout=30, frequency=0.5):
     do_log.info("查找 '{}' 元素值为 '{}' ".format(img_desc, loc))
     self.wait_ele_visible(loc, img_desc, timeout, frequency)
     try:
         ele = self.driver.find_element(*loc)
         do_log.info("找到 '{}' 元素".format(img_desc))
         return ele
     except:
         do_log.error("未找到 '{}' 元素".format(img_desc))
         raise
Exemple #10
0
 def wait_element_clickable(self, locator, timeout=20, poll_frequency=0.2):
     """等待元素可以被点击"""
     wait = WebDriverWait(self.driver, timeout, poll_frequency)
     try:
         e = wait.until(expected_conditions.element_to_be_clickable(locator))
     except Exception as err:
         self.save_screenshot()
         do_log.error(f"元素定位失败:{err}")
     else:
         return e
Exemple #11
0
 def click_element_use_js(self, loc, img_desc, timeout=30, frequency=0.5):
     do_log.info("在 '{}' 点击 ' {}' 元素".format(img_desc, loc))
     ele = self.find_element(loc, img_desc, timeout, frequency)
     try:
         self.driver.execute_script("arguments[0].click()", ele)
         do_log.info("在 '{}' 点击元素成功".format(img_desc))
     except:
         do_log.error("在 '{}' 点击元素失败".format(img_desc))
         self.save_error_screenshot(img_desc)
         raise
Exemple #12
0
 def switch_frame_by_name(self, name, img_desc, wait_time=0):
     do_log.info("在 '{}' 切换到名称为  '{}' 的frame".format(img_desc, name))
     time.sleep(wait_time)
     try:
         self.driver.switch_to.frame(name)
         do_log.info("切换到名称为 '{}' frame成功".format(img_desc))
     except:
         do_log.error("切换到名称为 '{}' frame失败".format(img_desc))
         self.save_error_screenshot(img_desc)
         raise
Exemple #13
0
 def switch_frame_by_index(self, index, img_desc, wait_time=0):
     do_log.info("在 '{}' 切换到索引为  '{}' 的frame".format(img_desc, index))
     time.sleep(wait_time)
     try:
         self.driver.switch_to.frame(index)
         do_log.info("切换索引为 '{}' frame成功".format(img_desc))
     except:
         do_log.error("切换 '{}'索引为 frame失败".format(img_desc))
         self.save_error_screenshot(img_desc)
         raise
Exemple #14
0
 def input_text_in_active_ele(self, img_desc, text_value, wait_time=0):
     do_log.info("在 '{}' 活动元素处输入 '{}' ".format(img_desc, text_value))
     time.sleep(wait_time)
     try:
         self.get_active_ele(img_desc).send_keys(text_value)
         do_log.info("在 '{}' 输入文本值成功".format(img_desc))
     except:
         do_log.error("在 '{}' 输入文本值失败".format(img_desc))
         self.save_error_screenshot(img_desc)
         raise
Exemple #15
0
 def slide_scoll_bar_to_bottom(self, img_desc, wait_time=0):
     do_log.info("开始滑动 '{}' 到底部".format(img_desc))
     time.sleep(wait_time)
     try:
         self.driver.execute_script(
             "window.scrollTo(0, document.body.scrollHeight)")
         do_log.info("滑动 '{}' 到底部成功".format(img_desc))
     except:
         do_log.error("滑动 '{}' 到底部部失败".format(img_desc))
         self.save_error_screenshot(img_desc)
         raise
Exemple #16
0
 def get_ele_text(self, loc, img_desc, timeout=30, frequency=0.5):
     do_log.info("获取 '{}' 元素的 '{}' 文本值".format(img_desc, loc))
     ele = self.find_element(loc, img_desc, timeout, frequency)
     try:
         text = ele.text
         do_log.info("获取 '{}' 文本为 '{}'  成功".format(img_desc, text))
         return text
     except:
         do_log.error("获取 '{}' 文本失败".format(img_desc))
         self.save_error_screenshot(img_desc)
         raise
Exemple #17
0
 def switch_to_window(self):
     """ 窗口切换到最新的窗口 """
     handles = self.driver.window_handles  # 获取浏览器当前打开的窗口数
     try:
         WebDriverWait(self.driver, 30, 1).until(expected_conditions.new_window_is_opened(handles))  # 等待新窗口出现
         self.driver.switch_to.window(self.driver.window_handles[-1])  # 切换到新窗口
     except Exception as err:
         self.save_screenshot()
         do_log.error(f"窗口切换失败:{err}")
     else:
         return self
Exemple #18
0
 def double_click(self, locator):
     """双击某个元素"""
     try:
         e = self.wait_element_clickable(locator)
         ac = ActionChains(self.driver)
         ac.double_click(e).perform()
     except Exception as err:
         self.save_screenshot()
         do_log.error(f"元素定位失败:{err}")
     else:
         return self
Exemple #19
0
 def slide_scoll_bar_to_top(self, loc, img_desc, timeout=30, frequency=0.5):
     do_log.info("开始滑动 '{}' 到顶部".format(img_desc))
     ele = self.find_element(loc, img_desc, timeout, frequency)
     try:
         self.driver.execute_script(
             "window.scrollTo(document.body.scrollHeight, 0)")
         do_log.info("滑动 '{}' 到顶部成功".format(img_desc))
     except:
         do_log.error("滑动 '{}' 到顶部失败".format(img_desc))
         self.save_error_screenshot(img_desc)
         raise
Exemple #20
0
 def input_text(self, loc, img_desc, text_value, timeout=30, frequency=0.5):
     do_log.info("在 '{}' 的 '{}' 元素处输入 '{}' ".format(img_desc, loc,
                                                    text_value))
     try:
         self.find_element(loc, img_desc, timeout,
                           frequency).send_keys(text_value)
         do_log.info("在 '{}' 输入文本值成功".format(img_desc))
     except:
         do_log.error("在 '{}' 输入文本值失败".format(img_desc))
         self.save_error_screenshot(img_desc)
         raise
Exemple #21
0
 def switch_to_alert(self):
     """切换到弹窗"""
     try:
         WebDriverWait(self.driver, 30).until(expected_conditions.alert_is_present())  # 等待弹窗出现
         alert = self.driver.switch_to.alert  # 先切换到弹框的
         alert.accept()  # 确认
         # text=alert.text()  #获取弹窗文本内容
     except Exception as err:
         self.save_screenshot()
         do_log.error(f"元素定位失败:{err}")
     else:
         return alert
Exemple #22
0
 def switch_to_frame(self, e, wait=False):
     """iframe 切换"""
     try:
         if not wait:
             self.driver.switch_to.frame(e)
             return self
         wait = WebDriverWait(self.driver, 30)
         wait.until(expected_conditions.frame_to_be_available_and_switch_to_it(e))
         return self
     except Exception as err:
         self.save_screenshot()
         do_log.error(f"元素定位失败:{err}")
Exemple #23
0
    def find_and_red(self, locator):
        """定位元素并且标成红色.。 装饰器实现。"""
        try:
            e = self.driver.find_element(*locator)
            # js 指令改变该元素的背景色。 border
            js_code = "arguments[0].style.borderColor='red';"
            self.driver.execute_script(js_code, e)

        except Exception as err:
            do_log.error(f"元素定位失败:{err}")
        else:
            return e
Exemple #24
0
    def test_login(self, login):
        """登录成功"""

        try:
            driver = login
            home_page = HomePage(driver)
            res = home_page.find_data()
            expect = "新 建"
            assert expect in res
        except Exception as e:
            do_log.error(f"测试用例不通过:{e}")
            raise e
Exemple #25
0
    def test_login_error(self, browser, test_info):
        """登录失败"""

        try:
            login_page = LoginPage(browser)

            login_page.get().login(test_info["user"], test_info["password"])
            res = login_page.login_error_text()
            expect = "帐号或密码不正确"
            assert expect in res
        except Exception as e:
            do_log.error(f"测试用例不通过:{e}")
            raise e
Exemple #26
0
    def test_adddoc(self, login):
        """新建doc功能"""

        try:
            driver = login
            home_page = HomePage(driver)
            home_page.get()
            res = home_page.find_open()
            expect = "开始"
            assert expect == res
        except Exception as e:
            do_log.error(f"测试用例不通过:{e}")
            raise e
Exemple #27
0
 def get_active_ele(self, img_desc):
     """
     return 一个活动的元素对象,适用于光标所在处的元素
     :param img_desc:
     :return: Webelement对象
     """
     do_log.info("查找 '{}' 的活动元素".format(img_desc))
     try:
         ele = self.driver.switch_to.active_element
         do_log.info("找到 '{}' 活动的元素".format(img_desc))
         return ele
     except:
         do_log.error("未找到 '{}' 活动的元素".format(img_desc))
         raise
Exemple #28
0
 def wait_ele_visible(self, loc, img_desc, timeout=30, frequency=0.5):
     do_log.info("等待 '{}' 元素值为 '{}' 可见".format(img_desc, loc))
     start_time = time.time()
     try:
         WebDriverWait(self.driver, timeout, frequency).until(
             EC.visibility_of_element_located(loc))
     except:
         do_log.error("查找 '{}' 元素出现失败".format(img_desc))
         raise
     else:
         end_time = time.time()
         wait_time = time.strftime("%H:%M:%S",
                                   time.localtime(end_time - start_time))
         do_log.info("等待 '{}' 元素出现成功,等待时间为 {}s".format(img_desc, wait_time))
Exemple #29
0
 def slide_scoll_bar_to_ele_top(self,
                                loc,
                                img_desc,
                                timeout=30,
                                frequency=0.5):
     do_log.info("开始滑动页面滚动条到 '{}' 顶部对齐,元素值为 '{}'".format(img_desc, loc))
     ele = self.find_element(loc, img_desc, timeout, frequency)
     try:
         self.driver.execute_script("arguments[0].scrollIntoView();", ele)
         do_log.info("滑动页面滚动条到 '{}' 顶部对齐成功".format(img_desc))
     except:
         do_log.error("滑动页面滚动条到 '{}' 顶部对齐失败".format(img_desc))
         self.save_error_screenshot(img_desc)
         raise
Exemple #30
0
 def switch_frame_by_webelement(self,
                                loc,
                                img_desc,
                                timeout=30,
                                frequency=0.5):
     do_log.info("在 '{}' 切换到 '{}' frame".format(img_desc, loc))
     ele = self.find_element(loc, img_desc, timeout, frequency)
     try:
         self.driver.switch_to.frame(ele)
         do_log.info("切换 '{}' frame成功".format(img_desc))
     except:
         do_log.error("切换 '{}' frame失败".format(img_desc))
         self.save_error_screenshot(img_desc)
         raise