Exemple #1
0
 def action_native_tap(self):
     if self._driver.attr.type == 'Appium':
         Logger.debug('启动模拟真实点击')
         self._driver.update_settings({'nativeWebTap': True})
         with suppress(BaseException):
             yield
         Logger.debug('关闭模拟真实点击')
         self._driver.update_settings({'nativeWebTap': False})
     else:
         yield
Exemple #2
0
 def get(self, url, https=False):
     if '://' not in url:
         if https:
             protocol = 'https'
         else:
             protocol = 'http'
         url = f'{protocol}://{url}'
         Logger.debug(f'自动添加{protocol}协议')
     Logger.debug(f'加载链接:{url}')
     self._driver.get(url)
Exemple #3
0
 def input(self, value, clear=True, stay=0.5):
     if not self.in_view:
         self.scroll_into_view(stay=stay)
     self.highlight()
     if clear:
         Logger.debug(f'清空输入框:{self._selector}')
         self._driver.execute_script('arguments[0].select();',
                                     self._element)
         self._element.send_keys(Keys.DELETE)
         time.sleep(0.5)
     Logger.debug(f'元素:{self._selector} 输入:{value}')
     self._element.send_keys(value)
Exemple #4
0
 def click(self, native_tap=None, stay=0.5):
     if not self.in_view:
         self.scroll_into_view(stay=stay)
     self.highlight()
     Logger.debug(f'点击元素:{self._selector}')
     if self._driver.attr.type == 'Selenium':
         if self._driver.attr.name in ['IE', 'Safari']:
             self._driver.execute_script('arguments[0].click();',
                                         self._element)
             return
     elif self._driver.attr.type == 'Appium' and self._driver.attr.name == 'Safari':
         if native_tap:
             with self.action_native_tap():
                 self._element.click()
             return
     try:
         self._element.click()
     except ElementClickInterceptedException:
         self.scroll_into_view(stay=stay)
         self._element.click()
Exemple #5
0
 def until_not(self, method, *args, **kwargs):
     while True:
         with Logger() as logger:
             with suppress(*self._exceptions):
                 if not method(*args, **kwargs):
                     logger.ending = True
                     return True
             logger.ending = False
             if time.time() > self._end_time:
                 logger.ending = True
                 if self._message:
                     raise AssertionError(self._message)
                 else:
                     return False
Exemple #6
0
 def page_timeout(self, wait_time):
     self._page_timeout = wait_time
     Logger.debug(f'设置页面加载超时时间:{wait_time}秒')
     self._driver.set_page_load_timeout(time_to_wait=wait_time)
Exemple #7
0
 def back(self):
     with self.wait_for_page_load():
         Logger.debug('回返上一页')
         self._driver.back()
Exemple #8
0
 def url(self):
     url = self._driver.current_url
     Logger.debug(f'当前链接为:{url}')
     return url
Exemple #9
0
 def size(self):
     width, height = self._driver.get_window_size().values()
     Logger.debug(f'当前窗口大小为:{width} {height}')
     return {"width": width, "height": height}
Exemple #10
0
 def __call__(self, *args, **kwargs):
     _value = self.outer_class._get_element(
         self._selector).get_attribute(name)
     Logger.debug(
         f'判断元素{self._selector}的属性{name}是否包含:{value},当前值为:{_value}')
     return self._value == _value
Exemple #11
0
 def get_img(self, filename=None):
     if filename is None:
         filename = f'{round(time.time())}.png'
     Logger.debug(f'截图并保存到:{filename}')
     self._driver.get_screenshot_as_file(filename=filename)
     return filename
Exemple #12
0
 def select_by_value(self, value):
     if not self.in_view:
         self.scroll_into_view()
     self.highlight()
     Logger.debug(f'选择值为{value}的选项')
     Select(webelement=self._element).select_by_value(value=value)
Exemple #13
0
 def text(self):
     text = self._element.text
     Logger.debug(f'元素:{self._selector} 的文本为:{text}')
     return text
Exemple #14
0
 def __call__(self, *args, **kwargs):
     Logger.debug('判断页面是否加载完毕')
     return self.outer_class.execute_script('return document.readyState;') == 'complete'
Exemple #15
0
 def get_base64(self):
     Logger.debug('截图并保存为Base64格式')
     return self._driver.get_screenshot_as_base64()
Exemple #16
0
 def stop(self):
     Logger.debug('停止页面加载')
     self._driver.execute_script('window.stop();')
Exemple #17
0
 def __call__(self, *args, **kwargs):
     Logger.debug('判断是否有新窗口打开')
     return len(self._current_windows) != len(self.outer_class.windows)
Exemple #18
0
 def __call__(self, *args, **kwargs):
     Logger.debug(f'判断链接是否不等于:{url}')
     return self._url != self.outer_class.url
Exemple #19
0
 def __call__(self, *args, **kwargs):
     Logger.debug(f'判断链接是否满足正则规则:{pattern}')
     return re.search(self._pattern, self.outer_class.url)
Exemple #20
0
 def __call__(self, *args, **kwargs):
     Logger.debug('判断弹窗是否显示')
     with suppress(NoAlertPresentException):
         alert = self.outer_class._driver.switch_to.alert
         return alert
     return False
Exemple #21
0
 def close(self):
     Logger.debug('关闭标签页')
     self._driver.close()
Exemple #22
0
 def quit(self):
     Logger.debug('退出浏览器')
     self._driver.quit()
Exemple #23
0
 def select_by_index(self, index):
     if not self.in_view:
         self.scroll_into_view()
     self.highlight()
     Logger.debug(f'选择第{index}选项')
     Select(webelement=self._element).select_by_index(index=index)
Exemple #24
0
 def forward(self):
     with self.wait_for_page_load():
         Logger.debug('前往下一页')
         self._driver.forward()
Exemple #25
0
 def select_by_text(self, text):
     if not self.in_view:
         self.scroll_into_view()
     self.highlight()
     Logger.debug(f'选择文本为:{text}的选项')
     Select(webelement=self._element).select_by_visible_text(text=text)
Exemple #26
0
 def refresh(self):
     with self.wait_for_page_load():
         Logger.debug('刷新页面')
         self._driver.refresh()
Exemple #27
0
 def attr(self, name):
     value = self._element.get_attribute(name=name)
     Logger.debug(f'元素:{self._selector} 的属性{name}值为:{value}')
     return value
Exemple #28
0
 def title(self):
     title = self._driver.title
     Logger.debug(f'当前标题为:{title}')
     return title
Exemple #29
0
 def __call__(self, *args, **kwargs):
     _text = self.outer_class._get_element(self._selector).text
     Logger.debug(
         f'判断元素{self._selector}的文本是否包含:{text},当前文本为:{_text}')
     return self._text == _text
Exemple #30
0
 def minimize(self):
     if self._driver.attr.type == 'Selenium':
         Logger.debug('窗口最小化')
         self._driver.minimize_window()