Esempio n. 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
Esempio n. 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)
Esempio n. 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)
Esempio n. 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()
Esempio n. 5
0
 def url(self):
     url = self._driver.current_url
     Logger.debug(f'当前链接为:{url}')
     return url
Esempio n. 6
0
 def minimize(self):
     if self._driver.attr.type == 'Selenium':
         Logger.debug('窗口最小化')
         self._driver.minimize_window()
Esempio n. 7
0
 def title(self):
     title = self._driver.title
     Logger.debug(f'当前标题为:{title}')
     return title
Esempio n. 8
0
 def text(self):
     text = self._element.text
     Logger.debug(f'元素:{self._selector} 的文本为:{text}')
     return text
Esempio n. 9
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
Esempio n. 10
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
Esempio n. 11
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)
Esempio n. 12
0
 def size(self):
     width, height = self._driver.get_window_size().values()
     Logger.debug(f'当前窗口大小为:{width} {height}')
     return {"width": width, "height": height}
Esempio n. 13
0
 def get_base64(self):
     Logger.debug('截图并保存为Base64格式')
     return self._driver.get_screenshot_as_base64()
Esempio n. 14
0
 def __call__(self, *args, **kwargs):
     Logger.debug(f'判断链接是否不等于:{url}')
     return self._url != self.outer_class.url
Esempio n. 15
0
 def __call__(self, *args, **kwargs):
     Logger.debug(f'判断链接是否满足正则规则:{pattern}')
     return re.search(self._pattern, self.outer_class.url)
Esempio n. 16
0
 def __call__(self, *args, **kwargs):
     Logger.debug('判断弹窗是否显示')
     with suppress(NoAlertPresentException):
         alert = self.outer_class._driver.switch_to.alert
         return alert
     return False
Esempio n. 17
0
 def __call__(self, *args, **kwargs):
     Logger.debug('判断是否有新窗口打开')
     return len(self._current_windows) != len(self.outer_class.windows)
Esempio n. 18
0
 def __call__(self, *args, **kwargs):
     Logger.debug('判断页面是否加载完毕')
     return self.outer_class.execute_script('return document.readyState;') == 'complete'
Esempio n. 19
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)
Esempio n. 20
0
 def stop(self):
     Logger.debug('停止页面加载')
     self._driver.execute_script('window.stop();')
Esempio n. 21
0
 def back(self):
     with self.wait_for_page_load():
         Logger.debug('回返上一页')
         self._driver.back()
Esempio n. 22
0
 def close(self):
     Logger.debug('关闭标签页')
     self._driver.close()
Esempio n. 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)
Esempio n. 24
0
 def quit(self):
     Logger.debug('退出浏览器')
     self._driver.quit()
Esempio n. 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)
Esempio n. 26
0
 def forward(self):
     with self.wait_for_page_load():
         Logger.debug('前往下一页')
         self._driver.forward()
Esempio n. 27
0
 def attr(self, name):
     value = self._element.get_attribute(name=name)
     Logger.debug(f'元素:{self._selector} 的属性{name}值为:{value}')
     return value
Esempio n. 28
0
 def refresh(self):
     with self.wait_for_page_load():
         Logger.debug('刷新页面')
         self._driver.refresh()
Esempio n. 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
Esempio n. 30
0
 def size(self, value: Tuple[float, float]):
     if self._driver.attr.type == 'Selenium':
         width, height = value
         Logger.debug(f'设置窗口大小为:{width} {height}')
         self._driver.set_window_size(width=width, height=height)