def find_one(self,type,type_text,timeout=10,poll_frequency=0.5):
     '''
     功能:查找元素,返回查找到的元素
     :param type: 根据那种类型查找元素
     :param value: 可以定位的元素的值
     :return: 查找到的元素本身
     '''
     sel_type = type.lower()
     try:
         if sel_type == 'id':
             return WebDriverWait(self.driver,timeout,poll_frequency).until(EC.visibility_of_element_located((By.ID,type_text)))
         elif sel_type == 'xpath':
             return WebDriverWait(self.driver,timeout,poll_frequency).until(EC.visibility_of_element_located((By.XPATH,type_text)))
         elif sel_type == 'class_name':
             return WebDriverWait(self.driver,timeout,poll_frequency).until(EC.visibility_of_element_located((By.CLASS_NAME,type_text)))
         elif sel_type == 'tag_name':
             return WebDriverWait(self.driver, timeout, poll_frequency).until(EC.visibility_of_element_located((By.TAG_NAME, type_text)))
         elif sel_type == 'link_text':
             return WebDriverWait(self.driver,timeout,poll_frequency).until(EC.visibility_of_element_located((By.LINK_TEXT,type_text)))
         elif sel_type == 'partial_link_text':
             return WebDriverWait(self.driver,timeout,poll_frequency).until(EC.visibility_of_element_located((By.PARTIAL_LINK_TEXT,type_text)))
         else:
             raise Exception("find_one - 类型{}不存在".format(type))
     except exception.TimeoutException:
         raise exception.TimeoutException("find_one - 超时")
Beispiel #2
0
def popup(browser, element, timeout=10):
    initial_window = browser.current_window_handle
    initial_windows = browser.window_handles
    time_elapsed = 0

    # Click to open the poup
    element.click()
    new_window = None

    while not new_window:
        new_window = [
            x for x in browser.window_handles if x not in initial_windows
        ]
        if not new_window:
            time.sleep(2)
            time_elapsed += 2
            if time_elapsed > timeout:
                raise exceptions.TimeoutException(
                    'Popup doesnt open in specified time')

    browser.switch_to_window(new_window)
    yield browser

    # Closes the new window
    if new_window in browser.window_handles:
        browser.switch_to_window(new_window)
        browser.close()

    # Back to initial window
    browser.switch_to_window(initial_window)
    def localizar_boton_perfil_usuario(driver: WebDriver, timeout: int = 7):
        tiempo_limite = Temporizador.obtener_tiempo_timer() + timeout

        while Temporizador.obtener_tiempo_timer() < tiempo_limite:

            # verifica si encontro folder en caso de estar en plataforma OWA 2013
            if ValidacionesHTML.verificar_elemento_encontrado_por_xpath(
                    driver, constantes_webdriver_actions.
                    CERRAR_SESION_BTN_PERFIL_USUARIO_OWA_2013):

                return driver.find_element_by_xpath(
                    constantes_webdriver_actions.
                    CERRAR_SESION_BTN_PERFIL_USUARIO_OWA_2013)

            # verifica si encontro folder en caso de estar en plataforma OWA 2016
            elif ValidacionesHTML.verificar_elemento_encontrado_por_xpath(
                    driver, constantes_webdriver_actions.
                    CERRAR_SESION_BTN_PERFIL_USUARIO_OWA_2016):

                return driver.find_element_by_xpath(
                    constantes_webdriver_actions.
                    CERRAR_SESION_BTN_PERFIL_USUARIO_OWA_2016)

        raise SelExcept.TimeoutException(
            msg=
            'No fue posible localizar el boton de perfil del usuario dentro de la '
            'plataforma')
 def waitforclickable(self, target, timeout):
     wait = WebDriverWait(self, timeout)
     try:
         wait.until(
             expected_conditions.element_to_be_clickable((By.ID, target)))
     except selenium_errors.TimeoutException:
         raise selenium_errors.TimeoutException(
             'Element {0} not found'.format(target))
     logger.info('Element {0} found'.format(target))
 def test_load_url_adds_timeout_error_to_result(self):
     mock_driver = mock.Mock(spec=browser_client_common.webdriver.Firefox)
     errors = []
     mock_driver.get.side_effect = exceptions.TimeoutException(
         'dummy exception')
     self.assertFalse(browser_client_common.load_url(
         mock_driver, 'http://fake.url/foo', errors))
     self.assertErrorMessagesEqual(
         ['Timed out waiting for page to load.',
          'Failed to load URL: http://fake.url/foo'], errors)
 def waitfor(self, target, timeout):
     wait = WebDriverWait(self, timeout)
     try:
         wait.until(
             expected_conditions.visibility_of_element_located(
                 (By.ACCESSIBILITY_ID, target)))
     except selenium_errors.TimeoutException:
         raise selenium_errors.TimeoutException(
             'Element {0} not found'.format(target))
     logger.info('Element {0} found'.format(target))
 def switch_alert(self,timeout=10,poll_frequency=0.5):
     '''
     功能:返回找到的alert元素
     :param timeout:
     :param poll_frequency:
     :return:alert元素
     '''
     try:
         return WebDriverWait(self.driver,timeout,poll_frequency).until(EC.alert_is_present())
     except exception.TimeoutException:
         raise exception.TimeoutException("switch_alert - 超时没有找到alert元素")
 def switch_iframe(self,iframe,timeout=10,poll_frequency=0.5):
     '''
     功能:如果有iframe并且可以切换,则切换过去
     :param iframe: iframe元素
     :param timeout:
     :param poll_frequency:
     :return:
     '''
     try:
         WebDriverWait(self.driver,timeout,poll_frequency).until(EC.frame_to_be_available_and_switch_to_it(iframe))
     except exception.TimeoutException:
         raise exception.TimeoutException("switch_iframe - 超时没有找到指定的iframe元素")
    def test_wait_until_element_is_visible_returns_false_when_wait_times_out(
            self, mock_webdriver_wait):
        mock_webdriver_wait.side_effect = exceptions.TimeoutException(
            'mock timeout exception')

        # In reality, these would be objects, but we mock with strings for
        # simplicity.
        mock_driver = 'mock driver'
        mock_element = 'mock DOM element'

        # Verify that the function returns False when the wait times out.
        self.assertFalse(browser_client_common.wait_until_element_is_visible(
            mock_driver, mock_element, 20))
Beispiel #10
0
 def wait_for_exist(self, locator, wait_frequency=20, wait_second=.5):
     """
     :Usage:
         driver.wait_for_exist('id=something')
     """
     for _ in range(wait_frequency):
         if self.is_element_exist(locator):
             return
         time.sleep(wait_second)
     else:
         raise exceptions.TimeoutException(
             f'wait for {wait_frequency * wait_second}s but element does not exist'
         )
Beispiel #11
0
 def wait_for_displayed(self, wait_frequency=20, wait_second=.5):
     """
     :Usage:
         element.wait_for_displayed()
     """
     for i in range(wait_frequency):
         if self.is_displayed():
             return
         time.sleep(wait_second)
     else:
         raise exceptions.TimeoutException(
             f'wait for {wait_frequency * wait_second}s but element does not display'
         )
Beispiel #12
0
 def elementwait(self, method, message=''):
     """
     搜索元素
     """
     if time.time() > self._end_time:
         raise exceptions.TimeoutException(message)
     else:
         try:
             value = method(self._driver)
             if value:
                 return value
         except exceptions.NoSuchElementException:
             time.sleep(self._interval_time)
             return self.elementwait(method)
Beispiel #13
0
 def get(self, url, can_retry=True):
     if can_retry:
         tries = 10
     else:
         tries = 1
     while tries > 0:
         tries -= 1
         self._tester.driver.get(url)
         if 'The website may be down' in self._tester.driver.page_source:
             time.sleep(5)
             continue
         return
     raise exceptions.TimeoutException(
         'Timeout waiting for %s page to load', url)
Beispiel #14
0
 def elementdisplay(self, message=''):
     """
     等待页面加载
     """
     flag = self._driver.execute_script("return document.readyState")
     while True:
         if flag == "complete":
             return True
         else:
             time.sleep(self._interval_time)
             flag = self._driver.execute_script(
                 "return document.readyState")
         if time.time() > self._end_time:
             break
     raise exceptions.TimeoutException(message)
    def test_test_records_error_when_run_test_button_is_not_in_dom(
            self, mock_ui):
        mock_wait_driver = mock.Mock()
        mock_wait_driver.until.side_effect = exceptions.TimeoutException(
            'mock_timeout')
        mock_ui.WebDriverWait.return_value = mock_wait_driver

        result = self.banjo.perform_test()

        self.assertIsNone(result.latency)
        self.assertIsNone(result.s2c_result.throughput)
        self.assertIsNone(result.c2s_result.throughput)
        self.assertErrorMessagesEqual(
            [banjo_driver.ERROR_FAILED_TO_LOCATE_RUN_TEST_BUTTON],
            result.errors)
Beispiel #16
0
 def until(self, method, message=''):
     """
     对定位元素进行操作
     :param method:方法(建议用lambda函数)
     :param message:报错信息
     """
     if time.time() > self._end_time:
         raise exceptions.TimeoutException(message)
     else:
         try:
             value = method(self._driver)
             if value:
                 return value
         except exceptions.WebDriverException:
             time.sleep(self._interval_time)
             return self.until(method)
    def localizar_enlace_cierre_sesion_owa_2010(driver: WebDriver,
                                                timeout: int = 7):
        tiempo_limite = Temporizador.obtener_tiempo_timer() + timeout

        while Temporizador.obtener_tiempo_timer() < tiempo_limite:

            # verifica si encontro folder en caso de estar en plataforma OWA 2013
            if ValidacionesHTML.verificar_elemento_encontrado_por_id(
                    driver, constantes_webdriver_actions.
                    CERRAR_SESION_CIERRE_SESION_ID_BTN_CIERRE_SESION_OWA_2010):
                return driver.find_element_by_id(
                    constantes_webdriver_actions.
                    CERRAR_SESION_CIERRE_SESION_ID_BTN_CIERRE_SESION_OWA_2010)

        raise SelExcept.TimeoutException(
            msg=
            'No fue posible localizar el boton de cierre de sesion dentro de la '
            'plataforma')
    def obtener_carpeta_con_timeout(driver: WebDriver,
                                    nombre_de_la_carpeta: str,
                                    timeout: int = 7):
        tiempo_limite = Temporizador.obtener_tiempo_timer() + timeout

        while Temporizador.obtener_tiempo_timer() < tiempo_limite:

            # verifica si encontro folder en caso de estar en plataforma OWA 2010
            if ValidacionesHTML.verificar_elemento_encontrado_por_xpath(
                    driver,
                    constantes_webdriver_actions.
                    NAVEGACION_CARPETAS_SEG_XPATH_CARPETA_OWA_2010.format(
                        nombre_de_la_carpeta)):

                return driver.find_element_by_xpath(
                    constantes_webdriver_actions.
                    NAVEGACION_CARPETAS_SEG_XPATH_CARPETA_OWA_2010.format(
                        nombre_de_la_carpeta))

            elif ValidacionesHTML.verificar_elemento_encontrado_por_xpath(
                    driver,
                    constantes_webdriver_actions.
                    NAVEGACION_CARPETAS_SEG_XPATH_CARPETA_OWA_2013.format(
                        nombre_de_la_carpeta)):

                return driver.find_element_by_xpath(
                    constantes_webdriver_actions.
                    NAVEGACION_CARPETAS_SEG_XPATH_CARPETA_OWA_2013.format(
                        nombre_de_la_carpeta))

            elif ValidacionesHTML.verificar_elemento_encontrado_por_xpath(
                    driver,
                    constantes_webdriver_actions.
                    NAVEGACION_CARPETAS_SEG_XPATH_CARPETA_OWA_2016.format(
                        nombre_de_la_carpeta)):

                return driver.find_element_by_xpath(
                    constantes_webdriver_actions.
                    NAVEGACION_CARPETAS_SEG_XPATH_CARPETA_OWA_2016.format(
                        nombre_de_la_carpeta))

        raise SelExcept.TimeoutException(
            msg='No fue posible localizar la carpeta dentro de la plataforma')
 def el_click(self,type,type_text,timeout=10,poll_frequency=0.5):
     '''
     功能:click方法
     :param type: 查找元素的方式
     :param type_text: 元素的特有属性值
     '''
     sel_type = type.lower()
     try:
         if sel_type == 'id':
             WebDriverWait(self.driver,timeout,poll_frequency).until(EC.element_to_be_clickable((By.ID,type_text))).click()
         elif sel_type == 'xpath':
             WebDriverWait(self.driver,timeout,poll_frequency).until(EC.element_to_be_clickable((By.XPATH,type_text))).click()
         elif sel_type == 'class_name':
             WebDriverWait(self.driver,timeout,poll_frequency).until(EC.element_to_be_clickable((By.CLASS_NAME,type_text))).click()
         elif sel_type == 'tag_name':
             WebDriverWait(self.driver, timeout, poll_frequency).until(EC.element_to_be_clickable((By.TAG_NAME, type_text))).click()
         elif sel_type == 'link_text':
             WebDriverWait(self.driver,timeout,poll_frequency).until(EC.element_to_be_clickable((By.LINK_TEXT,type_text))).click()
         elif sel_type == 'partial_link_text':
             WebDriverWait(self.driver,timeout,poll_frequency).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT,type_text))).click()
         else:
             raise Exception("el_click - 类型{}不存在".format(type))
     except exception.TimeoutException:
         raise exception.TimeoutException("el_click - 超时")
Beispiel #20
0
    def _swipe_on_screen(self,
                         locator: tuple = None,
                         swipe_max: int = 10,
                         swipe_type: str = 'down',
                         timeout: float = None) -> None:
        def _touch_action(start_x: int,
                          end_x: int,
                          start_y: int,
                          end_y: int,
                          ms: int = 200) -> None:
            self.touch_action. \
                press(x=start_x, y=start_y). \
                wait(ms=ms). \
                move_to(x=end_x, y=end_y). \
                release(). \
                perform()

        def _swipe_to(k_start: float, k_end: float) -> None:
            size = self.driver.get_window_size()

            x = int(size['width'] / 2)
            start_y = int(size['height'] * k_start)
            end_y = int(size['height'] * k_end)

            _touch_action(x, x, start_y, end_y)

        if swipe_type == 'up':

            # Переместить экран вверх.
            _swipe_to(0.4, 0.6)

        elif swipe_type == 'down':

            # Переместить экран вниз.
            _swipe_to(0.6, 0.4)

        elif swipe_type == 'to_element':

            # Переместить экран к элементу.
            count_swipes = 0
            while len(self.driver.find_elements(*locator)) == 0:
                if count_swipes > swipe_max:
                    raise exceptions.TimeoutException(
                        f'Unable to navigate to element: {locator}.')
                self._swipe_on_screen()
                count_swipes += 1

        elif swipe_type == 'middle':

            # Переместить элемент в центр.
            element = self.find_element(locator=locator, timeout=timeout)

            start_x = element.rect['x']

            upper_y = element.rect['y']
            lower_y = upper_y + element.rect['height']
            middle_y = (upper_y + lower_y) / 2

            middle_device_width = self.driver.get_window_size()['width'] / 2

            _touch_action(start_x, middle_device_width, middle_y, middle_y)

        else:
            raise UndefinedSwipeType(
                f'Got type: {swipe_type}. Expected: up, down, to_element, middle.'
            )
Beispiel #21
0
 def click(self, locator, timeout=0):
     """Check element visibility of element and click it."""
     if self.is_element_displayed(locator, timeout):
         self.driver.find_element(locator).click()
     else:
         raise ex.TimeoutException("Element not displayed")
Beispiel #22
0
 res = sock.recv(1024)
 # 收到消息后关闭套接字,并解码出url
 sock.close()
 task_url = res.decode("utf-8")
 # --------------------------- 网页爬取部分 --------------------------- #
 print("正在爬取网页:", task_url)
 cnt = 0
 # 尝试3次连接
 while cnt < 3:
     try:
         driver.get(task_url)
         break
     except exceptions.TimeoutException:
         cnt += 1
         if cnt == 3:
             raise exceptions.TimeoutException("timeout")
         print("超时,重试爬取:", task_url)
         time.sleep(2)
 time.sleep(1)
 # 用lxml.etree和XPath解析页面
 selector = etree.HTML(driver.page_source)
 article = {
     "title": selector.xpath(__XPATHS__["title"])[0],
     "time": selector.xpath(__XPATHS__["time"])[0],
     "author": selector.xpath(__XPATHS__["author"])[0],
     "tags": selector.xpath(__XPATHS__["tags"])[0].split(","),
     "url": selector.xpath(__XPATHS__["url"])[0],
     "content": ""
 }
 # 处理文章内容,保证换行正确
 arti_content = selector.xpath(__XPATHS__["content"])
 def mock_text_to_be_present_in_element(_, text):
     if self.timeout_by_text[text]:
         raise exceptions.TimeoutException('mock timeout')