Best Python code snippet using playwright-python
status.py
Source:status.py
1#!/usr/bin/python2#-*- coding:utf-8 -*-3# Copyright (C) 2011 ~ 2012 Deepin, Inc.4# 2011 ~ 2012 Long Changjin5# 6# Author: Long Changjin <admin@longchangjin.cn>7# Maintainer: Long Changjin <admin@longchangjin.cn>8# 9# This program is free software: you can redistribute it and/or modify10# it under the terms of the GNU General Public License as published by11# the Free Software Foundation, either version 3 of the License, or12# any later version.13# 14# This program is distributed in the hope that it will be useful,15# but WITHOUT ANY WARRANTY; without even the implied warranty of16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the17# GNU General Public License for more details.18# 19# You should have received a copy of the GNU General Public License20# along with this program. If not, see <http://www.gnu.org/licenses/>.21from constant import *22from action import *23import utils24class BaseProcess():25 ''' BaseProcess Class. it must be inherited and refactored'''26 def __init__(self, screenshot=None, window=None):27 '''28 init process29 @param screenshot: a Screenshot object30 @param window: a RootWindow object31 '''32 self.screenshot = screenshot33 self.win = window34 self.event = None35 self.func_map = {36 ACTION_INIT: self.action_init,37 ACTION_ARROW: self.action_arrow,38 ACTION_ELLIPSE: self.action_ellipse,39 ACTION_LINE: self.action_line,40 ACTION_RECTANGLE: self.action_rectangle,41 ACTION_SELECT: self.action_select,42 ACTION_TEXT: self.action_text,43 ACTION_WINDOW: self.action_window,44 None: self._none_action}45 46 def update(self, event):47 '''48 update event info49 @param event: a gtk.gdk.Event50 '''51 self.event = event52 53 def action_init(self, screenshot, event):54 '''55 process the in event in ACTION_INIT status56 @param screenshot: a Screenshot object57 @param event: a gtk.gdk.Event58 '''59 pass60 61 def action_arrow(self, screenshot, event):62 '''63 process the in event in ACTION_ARROW status64 @param screenshot: a Screenshot object65 @param event: a gtk.gdk.Event66 '''67 pass68 69 def action_ellipse(self, screenshot, event):70 '''71 process the in event in ACTION_ELLIPSE status72 @param screenshot: a Screenshot object73 @param event: a gtk.gdk.Event74 '''75 pass76 77 def action_line(self, screenshot, event):78 '''79 process the in event in ACTION_LINE status80 @param screenshot: a Screenshot object81 @param event: a gtk.gdk.Event82 '''83 pass84 85 def action_rectangle(self, screenshot, event):86 '''87 process the in event in ACTION_RECTANGLE status88 @param screenshot: a Screenshot object89 @param event: a gtk.gdk.Event90 '''91 pass92 93 def action_select(self, screenshot, event):94 '''95 process the in event in ACTION_SELECT status96 @param screenshot: a Screenshot object97 @param event: a gtk.gdk.Event98 '''99 pass100 101 def action_text(self, screenshot, event):102 '''103 process the in event in ACTION_TEXT status104 @param screenshot: a Screenshot object105 @param event: a gtk.gdk.Event106 '''107 pass108 109 def action_window(self, screenshot, event):110 '''111 process the in event in ACTION_WINDOW status112 @param screenshot: a Screenshot object113 @param event: a gtk.gdk.Event114 '''115 pass116 117 def _none_action(self, *arg):118 ''' process the in event in Action None status '''119 pass120 121class ButtonPressProcess(BaseProcess):122 ''' buton press status class'''123 def __init__(self, screenshot=None, window=None):124 BaseProcess.__init__(self, screenshot, window)125 def process(self):126 '''Press process button press event'''127 if self.event is None:128 return129 if self.screenshot.show_text_window_flag:130 allocation = self.screenshot.text_window.allocation131 text_view_x = allocation.x + self.screenshot.monitor_x132 text_view_y = allocation.y + self.screenshot.monitor_y133 # in text view area, ignore134 if text_view_x <= self.event.x_root <= text_view_x + allocation.width \135 and text_view_y <= self.event.y_root <= text_view_y + allocation.height:136 return137 if self.event.button == BUTTON_EVENT_LEFT:138 self.screenshot.drag_flag = True139 self.func_map[self.screenshot.action](self.screenshot, self.event)140 self.adjust(self.screenshot, self.event)141 elif self.event.button == BUTTON_EVENT_RIGHT:142 ev = self.event143 screenshot = self.screenshot144 if screenshot.window_flag: # has not select area, press right button quit145 self.win.quit()146 if is_in_rect((ev.x_root, ev.y_root), screenshot.get_rectangel()):147 self.win.make_menu((int(ev.x_root), int(ev.y_root))) # popup menu148 else:149 while screenshot.action_list:150 screenshot.action_list.pop()151 while screenshot.text_action_list:152 screenshot.text_action_list.pop()153 screenshot.text_action_info.clear()154 screenshot.undo()155 156 def action_window(self, screenshot, event):157 '''Press ACTION_WINDOW '''158 screenshot.window_flag = False159 def action_init(self, screenshot, event):160 '''Press ACTION_INIT '''161 (screenshot.x, screenshot.y) = self.win.get_event_coord(event)162 def action_select(self, screenshot, event):163 '''Press ACTION_SELECT '''164 # Init drag position.165 screenshot.drag_position = self.win.get_position(event)166 # Set cursor.167 self.win.set_cursor(screenshot.drag_position)168 # Get drag coord and offset.169 (screenshot.dragStartX, screenshot.dragStartY) = self.win.get_event_coord(event)170 screenshot.dragStartOffsetX = screenshot.dragStartX - screenshot.x171 screenshot.dragStartOffsetY = screenshot.dragStartY - screenshot.y172 def action_rectangle(self, screenshot, event):173 '''Press ACTION_RECTANGLE '''174 # Just create new action when drag position at inside of select area.175 if self.win.get_position(event) == DRAG_INSIDE:176 screenshot.current_action = RectangleAction(ACTION_RECTANGLE, screenshot.action_size, screenshot.action_color)177 # calculate the coord in the window178 #event_coord = self.win.get_event_coord(event)179 #action_x = event_coord[0] - screenshot.monitor_x180 #action_y = event_coord[1] - screenshot.monitor_y181 (action_x, action_y) = self.win.get_event_coord_in_monitor(event)182 screenshot.current_action.start_draw((action_x, action_y))183 184 def action_ellipse(self, screenshot, event):185 '''Press ACTION_ELLIPSE '''186 # Just create new action when drag position at inside of select area.187 if self.win.get_position(event) == DRAG_INSIDE:188 screenshot.current_action = EllipseAction(ACTION_ELLIPSE, screenshot.action_size, screenshot.action_color)189 # calculate the coord in the window190 #event_coord = self.win.get_event_coord(event)191 #action_x = event_coord[0] - screenshot.monitor_x192 #action_y = event_coord[1] - screenshot.monitor_y193 (action_x, action_y) = self.win.get_event_coord_in_monitor(event)194 screenshot.current_action.start_draw((action_x, action_y))195 def action_arrow(self, screenshot, event):196 '''Press ACTION_ARROW '''197 # Just create new action when drag position at inside of select area.198 if self.win.get_position(event) == DRAG_INSIDE:199 screenshot.current_action = ArrowAction(ACTION_ARROW, screenshot.action_size, screenshot.action_color)200 # calculate the coord in the window201 #event_coord = self.win.get_event_coord(event)202 #action_x = event_coord[0] - screenshot.monitor_x203 #action_y = event_coord[1] - screenshot.monitor_y204 (action_x, action_y) = self.win.get_event_coord_in_monitor(event)205 screenshot.current_action.start_draw((action_x, action_y))206 def action_line(self, screenshot, event):207 '''Press ACTION_LINE '''208 # Just create new action when drag position at inside of select area.209 if self.win.get_position(event) == DRAG_INSIDE:210 screenshot.current_action = LineAction(ACTION_LINE, screenshot.action_size, screenshot.action_color)211 # calculate the coord in the window212 #event_coord = self.win.get_event_coord(event)213 #action_x = event_coord[0] - screenshot.monitor_x214 #action_y = event_coord[1] - screenshot.monitor_y215 (action_x, action_y) = self.win.get_event_coord_in_monitor(event)216 screenshot.current_action.start_draw((action_x, action_y))217 def action_text(self, screenshot, event):218 '''Press ACTION_TEXT '''219 if screenshot.show_text_window_flag: # complete input text, changed action to None220 self.win.save_text_window()221 self.screenshot.toolbar.set_button_active("text", False)222 self.screenshot.current_text_action = None223 else: # create a new text224 # calculate the coord in the window225 #event_coord = self.win.get_event_coord(event)226 #action_x = event_coord[0] - screenshot.monitor_x227 #action_y = event_coord[1] - screenshot.monitor_y228 (action_x, action_y) = self.win.get_event_coord_in_monitor(event)229 self.win.show_text_window((action_x, action_y))230 def adjust(self, screenshot, event):231 '''Press adjust '''232 if screenshot.action in [ACTION_RECTANGLE, ACTION_ELLIPSE, ACTION_ARROW, ACTION_LINE] \233 and screenshot.show_toolbar_flag \234 and screenshot.y < screenshot.toolbarY < screenshot.y + screenshot.rect_height:235 self.win.hide_toolbar()236 self.win.hide_colorbar()237 # drag text 238 if screenshot.current_text_action and screenshot.action is None:239 # calculate the coord in the window240 #event_coord = self.win.get_event_coord(event)241 #currentX = event_coord[0] - screenshot.monitor_x242 #currentY = event_coord[1] - screenshot.monitor_y243 currentX, currentY = self.win.get_event_coord_in_monitor(event)244 drawTextX,drawTextY = screenshot.current_text_action.get_layout_info()[:2]245 screenshot.textDragOffsetX = currentX - drawTextX246 screenshot.textDragOffsetY = currentY - drawTextY247 screenshot.text_drag_flag = True 248class ButtonReleaseProcess(BaseProcess):249 ''' button release process'''250 def __init__(self, screenshot=None, window=None):251 BaseProcess.__init__(self, screenshot, window)252 253 def process(self):254 '''Release process button release event'''255 if self.event is None:256 return257 if self.event.button == BUTTON_EVENT_LEFT:258 self.screenshot.text_drag_flag = False259 self.screenshot.drag_flag = False260 self.func_map[self.screenshot.action](self.screenshot, self.event)261 self.adjust(self.screenshot, self.event)262 def action_window(self, screenshot, event):263 '''Release ACTION_WINDOW'''264 if screenshot.rect_width > 5 and screenshot.rect_height > 5:265 self.win.show_toolbar()266 self.win.adjust_toolbar()267 screenshot.action = ACTION_SELECT268 self.win.refresh()269 else:270 screenshot.window_flag = True271 272 def action_init(self, screenshot, event):273 '''Release ACTION_INIT'''274 screenshot.action = ACTION_SELECT275 (ex, ey) = self.win.get_event_coord(event)276 # Adjust rectangle when button release.277 if ex > screenshot.x:278 screenshot.rect_width = ex - screenshot.x279 else:280 screenshot.rect_width = abs(ex - screenshot.x)281 screenshot.x = max(ex, screenshot.monitor_x)282 if ey > screenshot.y:283 screenshot.rect_height = ey - screenshot.y284 else:285 screenshot.rect_height = abs(ey - screenshot.y)286 screenshot.y = max(ey, screenshot.monitor_y)287 # min rect 2 * 2288 if screenshot.rect_width < 2:289 screenshot.rect_width = 2290 if screenshot.rect_width + screenshot.x > screenshot.width:291 screenshot.x = screenshot.width - screenshot.rect_width292 if screenshot.rect_height < 2:293 screenshot.rect_height = 2294 if screenshot.rect_height + screenshot.y > screenshot.height:295 screenshot.y = screenshot.height - screenshot.rect_height296 self.win.refresh()297 self.win.show_toolbar()298 self.win.adjust_toolbar()299 def action_select(self, screenshot, event):300 '''Release ACTION_SELECT '''301 # min rect 2 * 2302 if screenshot.rect_width < 2:303 screenshot.rect_width = 2304 if screenshot.rect_width + screenshot.x > screenshot.width:305 screenshot.x = screenshot.width - screenshot.rect_width306 if screenshot.rect_height < 2:307 screenshot.rect_height = 2308 if screenshot.rect_height + screenshot.y > screenshot.height:309 screenshot.y = screenshot.height - screenshot.rect_height310 self.win.refresh()311 312 def action_rectangle(self, screenshot, event):313 '''Release ACTION_RECTANGLE '''314 if screenshot.current_action:315 # calculate the coord in the window316 #event_coord = self.win.get_event_coord(event)317 #action_x = event_coord[0] - screenshot.monitor_x318 #action_y = event_coord[1] - screenshot.monitor_y319 (action_x, action_y) = self.win.get_event_coord_in_monitor(event)320 screenshot.current_action.end_draw((action_x, action_y), screenshot.get_rectangel_in_monitor())321 screenshot.action_list.append(screenshot.current_action)322 screenshot.current_action = None323 self.win.refresh()324 def action_ellipse(self, screenshot, event):325 '''Release ACTION_ELLIPSE '''326 if screenshot.current_action:327 #event_coord = self.win.get_event_coord(event)328 #action_x = event_coord[0] - screenshot.monitor_x329 #action_y = event_coord[1] - screenshot.monitor_y330 (action_x, action_y) = self.win.get_event_coord_in_monitor(event)331 screenshot.current_action.end_draw((action_x, action_y), screenshot.get_rectangel_in_monitor())332 screenshot.action_list.append(screenshot.current_action)333 screenshot.current_action = None334 self.win.refresh()335 def action_arrow(self, screenshot, event):336 '''Release ACTION_ARROW '''337 if screenshot.current_action:338 #event_coord = self.win.get_event_coord(event)339 #action_x = event_coord[0] - screenshot.monitor_x340 #action_y = event_coord[1] - screenshot.monitor_y341 (action_x, action_y) = self.win.get_event_coord_in_monitor(event)342 screenshot.current_action.end_draw((action_x, action_y), screenshot.get_rectangel_in_monitor())343 screenshot.action_list.append(screenshot.current_action)344 screenshot.current_action = None345 self.win.refresh()346 def action_line(self, screenshot, event):347 '''Release ACTION_LINE '''348 if screenshot.current_action:349 #event_coord = self.win.get_event_coord(event)350 #action_x = event_coord[0] - screenshot.monitor_x351 #action_y = event_coord[1] - screenshot.monitor_y352 (action_x, action_y) = self.win.get_event_coord_in_monitor(event)353 screenshot.current_action.end_draw((action_x, action_y), screenshot.get_rectangel_in_monitor())354 screenshot.action_list.append(screenshot.current_action)355 screenshot.current_action = None356 self.win.refresh()357 358 def adjust(self, screenshot, event):359 '''Release adjust '''360 if screenshot.action in [ACTION_RECTANGLE, ACTION_ELLIPSE, ACTION_ARROW, ACTION_LINE, ACTION_TEXT] \361 and not screenshot.show_toolbar_flag \362 and screenshot.y < screenshot.toolbarY < screenshot.y + screenshot.rect_height:363 self.win.show_toolbar()364 self.win.adjust_toolbar()365 self.win.show_colorbar()366 self.win.adjust_colorbar()367class MotionProcess(BaseProcess):368 ''' Motion process'''369 def __init__(self, screenshot=None, window=None):370 BaseProcess.__init__(self, screenshot, window)371 372 def process(self):373 '''Motion process motion event'''374 if self.event is None:375 return376 self.func_map[self.screenshot.action](self.screenshot, self.event)377 self.adjust(self.screenshot, self.event)378 def action_window(self, screenshot, event):379 '''Motion ACTION_WINDOW'''380 # can drag and has selected area381 if screenshot.drag_flag and not screenshot.window_flag:382 (ex, ey) = self.win.get_event_coord(event)383 screenshot.action = ACTION_INIT384 (screenshot.x, screenshot.y) = self.win.get_event_coord(event)385 self.win.refresh()386 else: # update magnifier387 size = "%d x %d " % (screenshot.rect_width, screenshot.rect_height)388 rgb = utils.get_coord_rgb(screenshot, event.x, event.y)389 self.win.update_magnifier(event.x, event.y, size=size, rgb=str(rgb))390 391 def action_init(self, screenshot, event):392 '''Motion ACTION_INIT'''393 if screenshot.drag_flag:394 (ex, ey) = self.win.get_event_coord(event)395 (screenshot.rect_width, screenshot.rect_height) = (ex - screenshot.x, ey - screenshot.y)396 self.win.refresh()397 else:398 pass399 def action_select(self, screenshot, event):400 '''Motion ACTION_SELECT '''401 # drag the selected area402 if screenshot.drag_flag:403 (ex, ey) = self.win.get_event_coord(event)404 if screenshot.drag_position == DRAG_INSIDE:405 screenshot.x = min(max(ex - screenshot.dragStartOffsetX, screenshot.monitor_x),406 screenshot.monitor_x + screenshot.width - screenshot.rect_width)407 screenshot.y = min(max(ey - screenshot.dragStartOffsetY, screenshot.monitor_y),408 screenshot.monitor_y + screenshot.height - screenshot.rect_height)409 elif screenshot.drag_position == DRAG_TOP_SIDE:410 self.win.drag_frame_top(ex, ey)411 elif screenshot.drag_position == DRAG_BOTTOM_SIDE:412 self.win.drag_frame_bottom(ex, ey)413 elif screenshot.drag_position == DRAG_LEFT_SIDE:414 self.win.drag_frame_left(ex, ey)415 elif screenshot.drag_position == DRAG_RIGHT_SIDE:416 self.win.drag_frame_right(ex, ey)417 elif screenshot.drag_position == DRAG_TOP_LEFT_CORNER:418 self.win.drag_frame_top(ex, ey)419 self.win.drag_frame_left(ex, ey)420 elif screenshot.drag_position == DRAG_TOP_RIGHT_CORNER:421 self.win.drag_frame_top(ex, ey)422 self.win.drag_frame_right(ex, ey)423 elif screenshot.drag_position == DRAG_BOTTOM_LEFT_CORNER:424 self.win.drag_frame_bottom(ex, ey)425 self.win.drag_frame_left(ex, ey)426 elif screenshot.drag_position == DRAG_BOTTOM_RIGHT_CORNER:427 self.win.drag_frame_bottom(ex, ey)428 self.win.drag_frame_right(ex, ey) 429 self.win.refresh()430 self.win.show_toolbar()431 self.win.adjust_toolbar()432 else:433 screenshot.drag_position = self.win.get_position(event)434 # to avoid set cursor again435 if screenshot.last_drag_position != screenshot.drag_position:436 screenshot.last_drag_position = screenshot.drag_position437 self.win.set_cursor(screenshot.drag_position)438 439 def action_rectangle(self, screenshot, event):440 '''Motion ACTION_RECTANGLE '''441 if screenshot.drag_flag and screenshot.current_action:442 #event_coord = self.win.get_event_coord(event)443 #ex = event_coord[0] - screenshot.monitor_x444 #ey = event_coord[1] - screenshot.monitor_y445 (ex, ey) = self.win.get_event_coord_in_monitor(event)446 screenshot.current_action.drawing((ex, ey), screenshot.get_rectangel_in_monitor())447 self.win.refresh()448 else:449 pass450 def action_ellipse(self, screenshot, event):451 '''Motion ACTION_ELLIPSE '''452 if screenshot.drag_flag and screenshot.current_action:453 #event_coord = self.win.get_event_coord(event)454 #ex = event_coord[0] - screenshot.monitor_x455 #ey = event_coord[1] - screenshot.monitor_y456 (ex, ey) = self.win.get_event_coord_in_monitor(event)457 screenshot.current_action.drawing((ex, ey), screenshot.get_rectangel_in_monitor())458 self.win.refresh()459 else:460 pass461 def action_arrow(self, screenshot, event):462 '''Motion ACTION_ARROW '''463 if screenshot.drag_flag and screenshot.current_action:464 #event_coord = self.win.get_event_coord(event)465 #ex = event_coord[0] - screenshot.monitor_x466 #ey = event_coord[1] - screenshot.monitor_y467 (ex, ey) = self.win.get_event_coord_in_monitor(event)468 screenshot.current_action.drawing((ex, ey), screenshot.get_rectangel_in_monitor())469 self.win.refresh()470 else:471 pass472 def action_line(self, screenshot, event):473 '''Motion ACTION_LINE '''474 if screenshot.drag_flag and screenshot.current_action:475 #event_coord = self.win.get_event_coord(event)476 #ex = event_coord[0] - screenshot.monitor_x477 #ey = event_coord[1] - screenshot.monitor_y478 (ex, ey) = self.win.get_event_coord_in_monitor(event)479 screenshot.current_action.drawing((ex, ey), screenshot.get_rectangel_in_monitor())480 self.win.refresh()481 else:482 pass483 def adjust(self, screenshot, event):484 '''Motion adjust '''485 # can't drag and has not selected area486 if not screenshot.drag_flag and screenshot.window_flag:487 self.win.hide_toolbar()488 (wx, wy) = self.win.get_event_coord(event)489 for each in screenshot.screenshot_window_info:490 if each.x <= wx <= (each.x + each.width) and each.y <= wy <= (each.y + each.height):491 screenshot.x = each.x492 screenshot.y = each.y493 screenshot.rect_width = each.width494 screenshot.rect_height = each.height495 break496 self.win.refresh()497 498 # input text over499 if screenshot.action is None:500 (tx, ty) = self.win.get_event_coord_in_monitor(event) 501 # drag text502 if screenshot.text_drag_flag and screenshot.current_text_action:503 layout_info = screenshot.current_text_action.get_layout_info()504 des_x = tx - screenshot.textDragOffsetX505 des_y = ty - screenshot.textDragOffsetY506 if des_x < screenshot.x - screenshot.monitor_x: # left507 des_x = screenshot.x - screenshot.monitor_x508 elif des_x + layout_info[2] > screenshot.x - screenshot.monitor_x + screenshot.rect_width: # right509 des_x = screenshot.x - screenshot.monitor_x + screenshot.rect_width - layout_info[2]510 if des_y < screenshot.y - screenshot.monitor_y: # top511 des_y = screenshot.y - screenshot.monitor_y512 elif des_y + layout_info[3] > screenshot.y - screenshot.monitor_y + screenshot.rect_height: # bottom513 des_y = screenshot.y - screenshot.monitor_y + screenshot.rect_height - layout_info[3]514 screenshot.current_text_action.update_coord(des_x, des_y)515 screenshot.draw_text_layout_flag = True516 self.win.refresh()517 else:518 for each, info in screenshot.text_action_info.items():519 if screenshot.text_drag_flag: # has draged a text already520 break521 if info[0] <= tx <= info[0]+info[2] and info[1] <= ty <= info[1]+info[3]:522 screenshot.current_text_action = each523 524 if screenshot.current_text_action:525 drawTextX, drawTextY, drawTextWidth, drawTextHeight = screenshot.current_text_action.get_layout_info()526 if drawTextX <= tx <= drawTextX + drawTextWidth and drawTextY <= ty <= drawTextY + drawTextHeight:527 screenshot.draw_text_layout_flag = True528 self.win.set_cursor('drag')529 self.win.refresh()530 elif not screenshot.text_drag_flag: # drag text over, and not in text rectangle531 screenshot.draw_text_layout_flag = False 532 screenshot.current_text_action = None533 self.win.set_cursor(screenshot.action)...
screenshot.py
Source:screenshot.py
...29#------------------------------------------------------------------30driver = webdriver.Chrome(DRIVER, chrome_options = chrome_options)31driver.get('https://p2p.danamas.co.id/')32time.sleep(5)33screenshot = driver.save_screenshot('FolderPNG/danamas.png')34time.sleep(2)35driver.get('https://www.investree.id/')36time.sleep(5)37screenshot = driver.save_screenshot('FolderPNG/investree.png')38time.sleep(2)39driver.get('https://amartha.com/')40driver.execute_script("window.scrollTo(0, 500)") 41time.sleep(5)42screenshot = driver.save_screenshot('FolderPNG/amartha.png')43time.sleep(2)44driver.get('https://www.dompetkilat.co.id/')45time.sleep(5)46screenshot = driver.save_screenshot('FolderPNG/dompetkilat.png')47time.sleep(2)48driver.get('http://kimo.co.id/')49driver.execute_script("window.scrollTo(0, 450)") 50time.sleep(5)51screenshot = driver.save_screenshot('FolderPNG/kimo.png')52time.sleep(2)53driver.get('https://www.tokomodal.co.id/')54time.sleep(5)55screenshot = driver.save_screenshot('FolderPNG/tokomodal.png')56time.sleep(2)57driver.get('https://uangteman.com/')58time.sleep(5)59screenshot = driver.save_screenshot('FolderPNG/uangteman.png')60time.sleep(2)61driver.get('https://koinworks.com/')62time.sleep(5)63screenshot = driver.save_screenshot('FolderPNG/koinworks.png')64time.sleep(2)65driver.get('https://modalku.co.id/')66time.sleep(5)67screenshot = driver.save_screenshot('FolderPNG/modalku.png')68time.sleep(2)69driver.get('http://www.pendanaan.com/')70time.sleep(5)71screenshot = driver.save_screenshot('FolderPNG/pendanaan.png')72time.sleep(2)73driver.get('https://www.awantunai.com/')74time.sleep(5)75screenshot = driver.save_screenshot('FolderPNG/awantunai.png')76time.sleep(2)77driver.get('https://klikacc.com/')78time.sleep(5)79screenshot = driver.save_screenshot('FolderPNG/klikacc.png')80time.sleep(2)81driver.get('https://crowdo.co.id/')82time.sleep(5)83screenshot = driver.save_screenshot('FolderPNG/crowdo.png')84time.sleep(2)85driver.get('https://www.akseleran.com/')86time.sleep(5)87screenshot = driver.save_screenshot('FolderPNG/akseleran.png')88time.sleep(2)89driver.get('https://www.taralite.com/')90time.sleep(5)91screenshot = driver.save_screenshot('FolderPNG/teralite.png')92time.sleep(2)93driver.get('http://fintag.id/')94time.sleep(5)95screenshot = driver.save_screenshot('FolderPNG/fintag.png')96time.sleep(2)97driver.get('http://invoila.co.id/')98time.sleep(5)99screenshot = driver.save_screenshot('FolderPNG/invoila.png')100time.sleep(2)101driver.get('https://www.tunaikita.com/')102driver.execute_script("window.scrollTo(0, 800)") 103time.sleep(5)104screenshot = driver.save_screenshot('FolderPNG/tunaikita.png')105time.sleep(2)106driver.get('https://igrow.asia/')107driver.execute_script("window.scrollTo(0, 2800)") 108time.sleep(5)109screenshot = driver.save_screenshot('FolderPNG/igrow.png')110time.sleep(2)111driver.get('https://www.cicil.co.id/')112time.sleep(5)113screenshot = driver.save_screenshot('FolderPNG/cicil.png')114time.sleep(2)115driver.get('http://danamerdeka.co.id/')116driver.execute_script("window.scrollTo(0, 500)") 117time.sleep(5)118screenshot = driver.save_screenshot('FolderPNG/danamerdeka.png')119time.sleep(2)120driver.get('https://cashwagon.id/')121time.sleep(5)122screenshot = driver.save_screenshot('FolderPNG/cashwagon.png')123time.sleep(2)124driver.get('https://www.estakapital.co.id/')125driver.execute_script("document.body.style.zoom='70%'")126time.sleep(5)127screenshot = driver.save_screenshot('FolderPNG/estacapital.png')128time.sleep(2)129driver.get('https://ammana.id/')130time.sleep(5)131screenshot = driver.save_screenshot('FolderPNG/ammana.png')132time.sleep(2)133driver.get('https://gradana.co.id/')134time.sleep(5)135screenshot = driver.save_screenshot('FolderPNG/noinfo_gradana.png')136time.sleep(2)137driver.get('http://www.danamapan.id/')138time.sleep(5)139screenshot = driver.save_screenshot('FolderPNG/noinfo_danamapan.png')140time.sleep(2)141driver.get('http://www.aktivaku.com/')142time.sleep(5)143screenshot = driver.save_screenshot('FolderPNG/aktivaku.png')144time.sleep(2)145driver.get('https://danakini.co.id/')146wait = WebDriverWait(driver, 10)147element = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.pum-close.popmake-close"))).click()148driver.execute_script("window.scrollTo(0, 2200)") 149time.sleep(5)150screenshot = driver.save_screenshot('FolderPNG/danakini.png')151time.sleep(2)152driver.get('https://www.finmas.co.id/')153time.sleep(5)154screenshot = driver.save_screenshot('FolderPNG/finmas.png')155time.sleep(2)156driver.get('http://indodana.id/')157time.sleep(5)158screenshot = driver.save_screenshot('FolderPNG/indodana.png')159time.sleep(2)160driver.get('https://www.kredivo.id/')161time.sleep(5)162screenshot = driver.save_screenshot('FolderPNG/kredivo.png')163time.sleep(2)164driver.get('https://mekar.id/')165time.sleep(5)166screenshot = driver.save_screenshot('FolderPNG/mekar.png')167time.sleep(2)168driver.get('https://www.pinjamango.co.id/')169time.sleep(5)170screenshot = driver.save_screenshot('FolderPNG/pinjamango.png')171time.sleep(2)172driver.get('https://iternak.id/')173time.sleep(5)174screenshot = driver.save_screenshot('FolderPNG/iternak.png')175time.sleep(2)176driver.get('http://kreditpintar.co.id/')177time.sleep(5)178screenshot = driver.save_screenshot('FolderPNG/kreditpintar.png')179time.sleep(2)180driver.get('https://kredito.id/')181time.sleep(5)182screenshot = driver.save_screenshot('FolderPNG/kredito.png')183time.sleep(2)184driver.get('https://crowdo.co.id/')185time.sleep(5)186screenshot = driver.save_screenshot('FolderPNG/crowdo.png')187time.sleep(2)188driver.get('http://www.kreditplusteknologi.id/')189time.sleep(5)190screenshot = driver.save_screenshot('FolderPNG/kreditplusteknologi.png')191time.sleep(2)192driver.get('https://tanifund.com/')193time.sleep(5)194screenshot = driver.save_screenshot('FolderPNG/tanifund.png')195time.sleep(2)196driver.get('https://m.danain.co.id/beranda')197element = driver.find_element_by_css_selector('div.no-padding-bottom')198driver.execute_script("arguments[0].scrollIntoView()", element)199time.sleep(5)200screenshot = driver.save_screenshot('FolderPNG/danain.png')201time.sleep(2)202driver.get('https://indofund.id/')203time.sleep(5)204screenshot = driver.save_screenshot('FolderPNG/indofund.png')205time.sleep(2)206driver.get('http://kreditpro.id/')207time.sleep(5)208screenshot = driver.save_screenshot('FolderPNG/kreditpro.png')209time.sleep(2)210driver.get('http://www.avantee.co.id/')211driver.execute_script("window.scrollTo(0, 700)") 212time.sleep(5)213screenshot = driver.save_screenshot('FolderPNG/avantee.png')214time.sleep(2)215driver.get('http://www.do-it.id/')216time.sleep(5)217screenshot = driver.save_screenshot('FolderPNG/do-it.png')218time.sleep(2)219driver.get('http://www.rupiahcepat.co.id/')220time.sleep(5)221screenshot = driver.save_screenshot('FolderPNG/rupiahcepat.png')222time.sleep(2)223driver.get('http://www.danarupiah.id/')224time.sleep(5)225screenshot = driver.save_screenshot('FolderPNG/danarupiah.png')226time.sleep(2)227driver.get('http://danabijak.co.id/')228time.sleep(5)229screenshot = driver.save_screenshot('FolderPNG/danabijak.png')230time.sleep(2)231driver.get('http://cashcepat.id/')232time.sleep(5)233screenshot = driver.save_screenshot('FolderPNG/cashcepat.png')234time.sleep(2)235driver.get('http://danalaut.id/')236time.sleep(5)237screenshot = driver.save_screenshot('FolderPNG/noinfo_danalaut.png')238time.sleep(2)239driver.get('http://danasyariah.id/')240driver.execute_script("window.scrollTo(0, 750)") 241time.sleep(5)242screenshot = driver.save_screenshot('FolderPNG/danasyariah.png')243time.sleep(2)244driver.get('http://telefin.co.id/')245driver.execute_script("window.scrollTo(0, 200)") 246time.sleep(5)247screenshot = driver.save_screenshot('FolderPNG/telefin.png')248time.sleep(2)249driver.get('http://modalrakyat.id/')250time.sleep(5)251screenshot = driver.save_screenshot('FolderPNG/modalrakyat.png')252time.sleep(2)253driver.get('http://kawancicil.co.id/')254time.sleep(5)255screenshot = driver.save_screenshot('FolderPNG/kawancicil.png')256time.sleep(2)257driver.get('http://sanders.co.id/')258time.sleep(5)259screenshot = driver.save_screenshot('FolderPNG/sanders.png')260time.sleep(2)261driver.get('http://kreditcepat.co.id/')262time.sleep(5)263screenshot = driver.save_screenshot('FolderPNG/kreditcepat.png')264time.sleep(2)265driver.get('http://uangme.id/')266time.sleep(5)267screenshot = driver.save_screenshot('FolderPNG/uangme.png')268time.sleep(2)269driver.get('http://pinjamduit.co.id/')270time.sleep(5)271screenshot = driver.save_screenshot('FolderPNG/noinfo_pinjamduit.png')272time.sleep(2)273driver.get('http://www.pinjamyuk.co.id/')274driver.execute_script("document.body.style.zoom='80%'")275time.sleep(5)276screenshot = driver.save_screenshot('FolderPNG/pinjamyuk.png')277time.sleep(2)278driver.get('http://pinjammodal.id/')279time.sleep(5)280screenshot = driver.save_screenshot('FolderPNG/pinjammodal.png')281time.sleep(2)282driver.get('http://julo.co.id/')283time.sleep(5)284screenshot = driver.save_screenshot('FolderPNG/julo.png')285time.sleep(2)286driver.get('http://indo.geteasycash.asia/')287time.sleep(5)288screenshot = driver.save_screenshot('FolderPNG/noinfo_geteasycash.png')289time.sleep(2)290driver.get('http://maucash.id/')291time.sleep(5)292screenshot = driver.save_screenshot('FolderPNG/maucash.png')293time.sleep(2)294driver.get('http://rupiahone.co.id/')295time.sleep(5)296screenshot = driver.save_screenshot('FolderPNG/rupiahone.png')297time.sleep(2)298driver.get('http://pohondana.id/')299time.sleep(5)300screenshot = driver.save_screenshot('FolderPNG/pohondana.png')301time.sleep(2)302driver.get('http://danacita.co.id/')303time.sleep(5)304screenshot = driver.save_screenshot('FolderPNG/danacita.png')305time.sleep(2)306driver.get('http://danadidik.id/')307time.sleep(5)308screenshot = driver.save_screenshot('FolderPNG/danadidik.png')309time.sleep(2)310driver.get('http://trustiq.id/')311time.sleep(5)312screenshot = driver.save_screenshot('FolderPNG/trustiq.png')313time.sleep(2)314driver.get('http://danai.id/')315time.sleep(5)316screenshot = driver.save_screenshot('FolderPNG/danai.png')317time.sleep(2)318driver.get('http://pinduit.id/')319time.sleep(5)320screenshot = driver.save_screenshot('FolderPNG/noinfo_pinduit.png')321time.sleep(2)322driver.get('http://smartcapital.id/')323time.sleep(5)324screenshot = driver.save_screenshot('FolderPNG/noinfo_smartcapital.png')325time.sleep(2)326driver.get('http://danamart.id/')327time.sleep(5)328screenshot = driver.save_screenshot('FolderPNG/danamart.png')329time.sleep(2)330driver.get('http://samakita.co.id/')331time.sleep(5)332driver.execute_script("window.scrollTo(0, 600)")333time.sleep(2) 334screenshot = driver.save_screenshot('FolderPNG/samakita.png')335time.sleep(2)336driver.get('http://sayamodalin.co.id/')337driver.execute_script("window.scrollTo(0, 300)") 338time.sleep(5)339screenshot = driver.save_screenshot('FolderPNG/sayamodalin.png')340time.sleep(2)341driver.get('http://plazapinjaman.id/')342time.sleep(5)343screenshot = driver.save_screenshot('FolderPNG/noinfo_plazapinjaman.png')344time.sleep(2)345driver.get('http://web.vestia.co.id/')346wait = WebDriverWait(driver, 10)347time.sleep(10)348screenshot = driver.save_screenshot('FolderPNG/vestia.png')349time.sleep(2)350driver.get('http://singa.id/')351time.sleep(5)352screenshot = driver.save_screenshot('FolderPNG/singa.png')353time.sleep(2)354driver.get('https://www.adakami.id')355time.sleep(5)356screenshot = driver.save_screenshot('FolderPNG/adakami.png')357time.sleep(2)358driver.get('http://modalusaha.id/')359driver.execute_script("window.scrollTo(0, 300)") 360time.sleep(5)361screenshot = driver.save_screenshot('FolderPNG/modalusaha.png')362time.sleep(2)363driver.get('http://asetku.co.id/')364time.sleep(5)365screenshot = driver.save_screenshot('FolderPNG/asetku.png')366time.sleep(2)367driver.get('http://danafix.id/')368time.sleep(5)369screenshot = driver.save_screenshot('FolderPNG/noinfo_danafix.png')370time.sleep(2)371driver.get('http://lumbungdana.co.id/')372time.sleep(5)373screenshot = driver.save_screenshot('FolderPNG/lumbungdana.png')374time.sleep(2)375driver.get('http://lahansikam.co.id')376time.sleep(5)377screenshot = driver.save_screenshot('FolderPNG/lahansikam.png')378time.sleep(2)379driver.get('http://www.modalnasional.co.id/')380time.sleep(5)381screenshot = driver.save_screenshot('FolderPNG/modalnasional.png')382time.sleep(2)383driver.get('http://www.danabagus.id/')384driver.execute_script("window.scrollTo(0, 700)") 385time.sleep(5)386screenshot = driver.save_screenshot('FolderPNG/danabagus.png')387time.sleep(2)388driver.get('https://www.lenteradana.co.id/lender/lender-home')389time.sleep(5)390screenshot = driver.save_screenshot('FolderPNG/noinfo_lenteradana.png')391time.sleep(2)392driver.get('http://www.ikredo.id/')393time.sleep(5)394screenshot = driver.save_screenshot('FolderPNG/ikredo.png')395time.sleep(2)396driver.get('https://www.adakita.co.id/')397time.sleep(5)398screenshot = driver.save_screenshot('FolderPNG/adakita.png')399time.sleep(2)400driver.get('http://www.ukuindo.com/')401time.sleep(5)402screenshot = driver.save_screenshot('FolderPNG/ukuindo.png')403time.sleep(2)404driver.get('http://www.pinjamwinwin.com/')405time.sleep(5)406screenshot = driver.save_screenshot('FolderPNG/pinjamwinwin.png')407time.sleep(2)408driver.get('http://www.pasarpinjam.co.id/')409time.sleep(5)410screenshot = driver.save_screenshot('FolderPNG/pasarpinjam.png')411time.sleep(2)412driver.get('http://www.kredinesia.id/')413time.sleep(5)414screenshot = driver.save_screenshot('FolderPNG/kredinesia.png')415time.sleep(2)416driver.get('http://www.bkdana.id/')417time.sleep(5)418screenshot = driver.save_screenshot('FolderPNG/bkdana.png')419time.sleep(2)420driver.get('http://www.gandengtangan.co.id/')421time.sleep(5)422screenshot = driver.save_screenshot('FolderPNG/gandengtangan.png')423time.sleep(2)424driver.get('http://www.modalantara.id/')425time.sleep(5)426screenshot = driver.save_screenshot('FolderPNG/modalantara.png')427time.sleep(2)428driver.get('http://www.komunal.co.id/')429time.sleep(5)430screenshot = driver.save_screenshot('FolderPNG/komunal.png')431time.sleep(2)432driver.get('http://www.prosperitree.co.id/')433time.sleep(5)434screenshot = driver.save_screenshot('FolderPNG/prosperitree.png')435time.sleep(2)436driver.get('http://www.danakoo.id/')437driver.execute_script("window.scrollTo(0, 1000)") 438time.sleep(5)439screenshot = driver.save_screenshot('FolderPNG/danakoo.png')440time.sleep(2)441driver.get('http://www.cairin.id/')442time.sleep(5)443screenshot = driver.save_screenshot('FolderPNG/cairin.png')444time.sleep(2)445driver.get('http://www.batumbu.id/')446time.sleep(5)447screenshot = driver.save_screenshot('FolderPNG/batumbu.png')448time.sleep(2)449driver.get('http://www.empatkali.co.id/')450time.sleep(5)451screenshot = driver.save_screenshot('FolderPNG/noinfo_empatkali.png')452time.sleep(2)453driver.get('http://www.jembatanemas.id/')454time.sleep(5)455screenshot = driver.save_screenshot('FolderPNG/noinfo_jembatanemas.png')456time.sleep(2)457driver.get('http://www.klikumkm.co.id/')458time.sleep(5)459screenshot = driver.save_screenshot('FolderPNG/klikumkm.png')460time.sleep(2)461driver.get('http://www.kredible.co.id/')462time.sleep(5)463screenshot = driver.save_screenshot('FolderPNG/kredible.png')464time.sleep(2)465driver.get('http://www.klikkami.co.id/')466time.sleep(5)467screenshot = driver.save_screenshot('FolderPNG/noinfo_klikkami.png')468time.sleep(2)469driver.get('http://www.kaching.id/')470time.sleep(5)471screenshot = driver.save_screenshot('FolderPNG/noinfo_kaching.png')472time.sleep(2)473driver.get('http://www.finplus.co.id/')474time.sleep(5)475screenshot = driver.save_screenshot('FolderPNG/noinfo_finplus.png')476time.sleep(2)477driver.get('http://www.p2p.alamisharia.co.id/')478time.sleep(5)479screenshot = driver.save_screenshot('FolderPNG/alamisharia.png')480time.sleep(2)481driver.get('http://www.syarfi.id/')482time.sleep(5)483screenshot = driver.save_screenshot('FolderPNG/noinfo_syarfi.png')484time.sleep(2)485driver.get('http://www.digilend.id/')486time.sleep(5)487screenshot = driver.save_screenshot('FolderPNG/digilend.png')488time.sleep(2)489driver.get('http://www.asakita.id/')490time.sleep(5)491driver.execute_script("document.body.style.zoom='50%'")492screenshot = driver.save_screenshot('FolderPNG/noinfo_asakita.png')493time.sleep(2)494driver.get('http://www.duhasyariah.com/')495time.sleep(5)496screenshot = driver.save_screenshot('FolderPNG/duhasyariah.png')497time.sleep(2)498driver.get('http://bocil.id')499time.sleep(5)500screenshot = driver.save_screenshot('FolderPNG/noinfo_bocil.png')501time.sleep(2)502driver.get('http://www.qazwa.id/bermasalah')503time.sleep(5)504screenshot = driver.save_screenshot('FolderPNG/qazwa.png')505time.sleep(2)506driver.get('http://www.bsalam.id/')507time.sleep(5)508screenshot = driver.save_screenshot('FolderPNG/bsalam.png')509time.sleep(2)510driver.get('http://www.onehope.co.id/')511time.sleep(5)512screenshot = driver.save_screenshot('FolderPNG/noinfo_onehope.png')513time.sleep(2)514driver.get('http://www.ladangmodal.com/')515time.sleep(5)516screenshot = driver.save_screenshot('FolderPNG/noinfo_ladangmodal.png')517time.sleep(2)518driver.get('http://www.dhanapala.id/')519time.sleep(5)520screenshot = driver.save_screenshot('FolderPNG/dhanapala.png')521time.sleep(2)522driver.get('http://www.restock.id/')523time.sleep(5)524screenshot = driver.save_screenshot('FolderPNG/noinfo_restock.png')525time.sleep(2)526driver.get('http://www.solusi-ku.id/')527time.sleep(5)528screenshot = driver.save_screenshot('FolderPNG/noinfo_solusi-ku.png')529time.sleep(2)530driver.get('http://www.pinjamdisini.com/')531time.sleep(5)532screenshot = driver.save_screenshot('FolderPNG/pinjamdisini.png')533time.sleep(2)534driver.get('http://www.adapundi.com/')535time.sleep(5)536screenshot = driver.save_screenshot('FolderPNG/noinfo_adapundi.png')537time.sleep(2)538driver.get('http://www.treeplus.id/')539time.sleep(5)540screenshot = driver.save_screenshot('FolderPNG/treeplus.png')541time.sleep(2)542driver.get('http://www.assetkita.com/')543time.sleep(5)544screenshot = driver.save_screenshot('FolderPNG/assetkita.png')545time.sleep(2)546driver.get('http://www.edufund.co.id/')547time.sleep(5)548screenshot = driver.save_screenshot('FolderPNG/noinfo_edufund.png')549time.sleep(2)550driver.get('http://finanku.com/')551time.sleep(5)552screenshot = driver.save_screenshot('FolderPNG/finanku.png')553time.sleep(2)554driver.get('http://www.tunasaku.co.id/')555time.sleep(5)556screenshot = driver.save_screenshot('FolderPNG/noinfo_tunasaku.png')557time.sleep(2)558driver.get('http://www.uatas.id/')559time.sleep(5)560screenshot = driver.save_screenshot('FolderPNG/noinfo_uatas.png')561time.sleep(2)562targetPath_PNG = os.path.join(cwd, datestring)563while not os.path.exists(targetPath_PNG):564 os.mkdir(targetPath_PNG)565cwd = os.getcwd()566source = cwd+'/FolderPNG/'567dest1 = targetPath_PNG568files = os.listdir(source)569for f in files:...
test_with_screenshot.py
Source:test_with_screenshot.py
...22 viewer.add_image(data, colormap='red', name='red')23 viewer.add_image(data, colormap='green', name='green')24 viewer.add_image(data, colormap='blue', name='blue')25 # Check that blue is visible26 screenshot = viewer.screenshot(canvas_only=True, flash=False)27 center = tuple(np.round(np.divide(screenshot.shape[:2], 2)).astype(int))28 np.testing.assert_almost_equal(screenshot[center], [0, 0, 255, 255])29 # Remove and re-add image30 viewer.layers.remove('red')31 viewer.add_image(data, colormap='red', name='red')32 # Check that red is visible33 screenshot = viewer.screenshot(canvas_only=True, flash=False)34 np.testing.assert_almost_equal(screenshot[center], [255, 0, 0, 255])35 # Remove two other images36 viewer.layers.remove('green')37 viewer.layers.remove('blue')38 # Check that red is still visible39 screenshot = viewer.screenshot(canvas_only=True, flash=False)40 np.testing.assert_almost_equal(screenshot[center], [255, 0, 0, 255])41 # Add two other layers back42 viewer.add_image(data, colormap='green', name='green')43 viewer.add_image(data, colormap='blue', name='blue')44 # Check that blue is visible45 screenshot = viewer.screenshot(canvas_only=True, flash=False)46 np.testing.assert_almost_equal(screenshot[center], [0, 0, 255, 255])47 # Hide blue48 viewer.layers['blue'].visible = False49 # Check that green is visible. Note this assert was failing before #146350 screenshot = viewer.screenshot(canvas_only=True, flash=False)51 np.testing.assert_almost_equal(screenshot[center], [0, 255, 0, 255])52@skip_on_win_ci53@skip_local_popups54def test_z_order_images(make_napari_viewer):55 """Test changing order of images changes z order in display."""56 data = np.ones((11, 11))57 viewer = make_napari_viewer(show=True)58 viewer.add_image(data, colormap='red')59 viewer.add_image(data, colormap='blue')60 screenshot = viewer.screenshot(canvas_only=True, flash=False)61 center = tuple(np.round(np.divide(screenshot.shape[:2], 2)).astype(int))62 # Check that blue is visible63 np.testing.assert_almost_equal(screenshot[center], [0, 0, 255, 255])64 viewer.layers.move(1, 0)65 screenshot = viewer.screenshot(canvas_only=True, flash=False)66 center = tuple(np.round(np.divide(screenshot.shape[:2], 2)).astype(int))67 # Check that red is now visible68 np.testing.assert_almost_equal(screenshot[center], [255, 0, 0, 255])69@skip_on_win_ci70@skip_local_popups71def test_z_order_image_points(make_napari_viewer):72 """Test changing order of image and points changes z order in display."""73 data = np.ones((11, 11))74 viewer = make_napari_viewer(show=True)75 viewer.add_image(data, colormap='red')76 viewer.add_points([5, 5], face_color='blue', size=10)77 screenshot = viewer.screenshot(canvas_only=True, flash=False)78 center = tuple(np.round(np.divide(screenshot.shape[:2], 2)).astype(int))79 # Check that blue is visible80 np.testing.assert_almost_equal(screenshot[center], [0, 0, 255, 255])81 viewer.layers.move(1, 0)82 screenshot = viewer.screenshot(canvas_only=True, flash=False)83 center = tuple(np.round(np.divide(screenshot.shape[:2], 2)).astype(int))84 # Check that red is now visible85 np.testing.assert_almost_equal(screenshot[center], [255, 0, 0, 255])86@skip_on_win_ci87@skip_local_popups88def test_z_order_images_after_ndisplay(make_napari_viewer):89 """Test z order of images remanins constant after chaning ndisplay."""90 data = np.ones((11, 11))91 viewer = make_napari_viewer(show=True)92 viewer.add_image(data, colormap='red')93 viewer.add_image(data, colormap='blue')94 screenshot = viewer.screenshot(canvas_only=True, flash=False)95 center = tuple(np.round(np.divide(screenshot.shape[:2], 2)).astype(int))96 # Check that blue is visible97 np.testing.assert_almost_equal(screenshot[center], [0, 0, 255, 255])98 # Switch to 3D rendering99 viewer.dims.ndisplay = 3100 screenshot = viewer.screenshot(canvas_only=True, flash=False)101 center = tuple(np.round(np.divide(screenshot.shape[:2], 2)).astype(int))102 # Check that blue is still visible103 np.testing.assert_almost_equal(screenshot[center], [0, 0, 255, 255])104 # Switch back to 2D rendering105 viewer.dims.ndisplay = 2106 screenshot = viewer.screenshot(canvas_only=True, flash=False)107 center = tuple(np.round(np.divide(screenshot.shape[:2], 2)).astype(int))108 # Check that blue is still visible109 np.testing.assert_almost_equal(screenshot[center], [0, 0, 255, 255])110@skip_on_win_ci111@skip_local_popups112def test_z_order_image_points_after_ndisplay(make_napari_viewer):113 """Test z order of image and points remanins constant after chaning ndisplay."""114 data = np.ones((11, 11))115 viewer = make_napari_viewer(show=True)116 viewer.add_image(data, colormap='red')117 viewer.add_points([5, 5], face_color='blue', size=5)118 screenshot = viewer.screenshot(canvas_only=True, flash=False)119 center = tuple(np.round(np.divide(screenshot.shape[:2], 2)).astype(int))120 # Check that blue is visible121 np.testing.assert_almost_equal(screenshot[center], [0, 0, 255, 255])122 # Switch to 3D rendering123 viewer.dims.ndisplay = 3124 screenshot = viewer.screenshot(canvas_only=True, flash=False)125 center = tuple(np.round(np.divide(screenshot.shape[:2], 2)).astype(int))126 # Check that blue is still visible127 np.testing.assert_almost_equal(screenshot[center], [0, 0, 255, 255])128 # Switch back to 2D rendering129 viewer.dims.ndisplay = 2130 screenshot = viewer.screenshot(canvas_only=True, flash=False)131 center = tuple(np.round(np.divide(screenshot.shape[:2], 2)).astype(int))132 # Check that blue is still visible133 np.testing.assert_almost_equal(screenshot[center], [0, 0, 255, 255])134@skip_on_win_ci135@skip_local_popups136def test_changing_image_colormap(make_napari_viewer):137 """Test changing colormap changes rendering."""138 viewer = make_napari_viewer(show=True)139 data = np.ones((20, 20, 20))140 layer = viewer.add_image(data, contrast_limits=[0, 1])141 screenshot = viewer.screenshot(canvas_only=True, flash=False)142 center = tuple(np.round(np.divide(screenshot.shape[:2], 2)).astype(int))143 np.testing.assert_almost_equal(screenshot[center], [255, 255, 255, 255])144 layer.colormap = 'red'145 screenshot = viewer.screenshot(canvas_only=True, flash=False)146 np.testing.assert_almost_equal(screenshot[center], [255, 0, 0, 255])147 viewer.dims.ndisplay = 3148 screenshot = viewer.screenshot(canvas_only=True, flash=False)149 np.testing.assert_almost_equal(screenshot[center], [255, 0, 0, 255])150 layer.colormap = 'blue'151 screenshot = viewer.screenshot(canvas_only=True, flash=False)152 np.testing.assert_almost_equal(screenshot[center], [0, 0, 255, 255])153 viewer.dims.ndisplay = 2154 screenshot = viewer.screenshot(canvas_only=True, flash=False)155 np.testing.assert_almost_equal(screenshot[center], [0, 0, 255, 255])156@skip_on_win_ci157@skip_local_popups158def test_changing_image_gamma(make_napari_viewer):159 """Test changing gamma changes rendering."""160 viewer = make_napari_viewer(show=True)161 data = np.ones((20, 20, 20))162 layer = viewer.add_image(data, contrast_limits=[0, 2])163 screenshot = viewer.screenshot(canvas_only=True, flash=False)164 center = tuple(np.round(np.divide(screenshot.shape[:2], 2)).astype(int))165 assert 127 <= screenshot[center + (0,)] <= 129166 layer.gamma = 0.1167 screenshot = viewer.screenshot(canvas_only=True, flash=False)168 assert screenshot[center + (0,)] > 230169 viewer.dims.ndisplay = 3170 screenshot = viewer.screenshot(canvas_only=True, flash=False)171 assert screenshot[center + (0,)] > 230172 layer.gamma = 1.9173 screenshot = viewer.screenshot(canvas_only=True, flash=False)174 assert screenshot[center + (0,)] < 80175 viewer.dims.ndisplay = 2176 screenshot = viewer.screenshot(canvas_only=True, flash=False)177 assert screenshot[center + (0,)] < 80178@skip_on_win_ci179@skip_local_popups180def test_grid_mode(make_napari_viewer):181 """Test changing gamma changes rendering."""182 viewer = make_napari_viewer(show=True)183 # Add images184 data = np.ones((6, 15, 15))185 viewer.add_image(data, channel_axis=0, blending='translucent')186 assert not viewer.grid.enabled187 assert viewer.grid.actual_shape(6) == (1, 1)188 assert viewer.grid.stride == 1189 translations = [layer._translate_grid for layer in viewer.layers]190 expected_translations = np.zeros((6, 2))191 np.testing.assert_allclose(translations, expected_translations)192 # check screenshot193 screenshot = viewer.screenshot(canvas_only=True, flash=False)194 center = tuple(np.round(np.divide(screenshot.shape[:2], 2)).astype(int))195 np.testing.assert_almost_equal(screenshot[center], [0, 0, 255, 255])196 # enter grid view197 viewer.grid.enabled = True198 assert viewer.grid.enabled199 assert viewer.grid.actual_shape(6) == (2, 3)200 assert viewer.grid.stride == 1201 translations = [layer._translate_grid for layer in viewer.layers]202 expected_translations = [203 [0, 0],204 [0, 15],205 [0, 30],206 [15, 0],207 [15, 15],208 [15, 30],209 ]210 np.testing.assert_allclose(translations, expected_translations[::-1])211 # check screenshot212 screenshot = viewer.screenshot(canvas_only=True, flash=False)213 # sample 6 squares of the grid and check they have right colors214 pos = [215 (1 / 3, 1 / 4),216 (1 / 3, 1 / 2),217 (1 / 3, 3 / 4),218 (2 / 3, 1 / 4),219 (2 / 3, 1 / 2),220 (2 / 3, 3 / 4),221 ]222 # BGRMYC color order223 color = [224 [0, 0, 255, 255],225 [0, 255, 0, 255],226 [255, 0, 0, 255],227 [255, 0, 255, 255],228 [255, 255, 0, 255],229 [0, 255, 255, 255],230 ]231 for c, p in zip(color, pos):232 coord = tuple(233 np.round(np.multiply(screenshot.shape[:2], p)).astype(int)234 )235 np.testing.assert_almost_equal(screenshot[coord], c)236 # reorder layers, swapping 0 and 5237 viewer.layers.move(5, 0)238 viewer.layers.move(1, 6)239 # check screenshot240 screenshot = viewer.screenshot(canvas_only=True, flash=False)241 # CGRMYB color order242 color = [243 [0, 255, 255, 255],244 [0, 255, 0, 255],245 [255, 0, 0, 255],246 [255, 0, 255, 255],247 [255, 255, 0, 255],248 [0, 0, 255, 255],249 ]250 for c, p in zip(color, pos):251 coord = tuple(252 np.round(np.multiply(screenshot.shape[:2], p)).astype(int)253 )254 np.testing.assert_almost_equal(screenshot[coord], c)255 # return to stack view256 viewer.grid.enabled = False257 assert not viewer.grid.enabled258 assert viewer.grid.actual_shape(6) == (1, 1)259 assert viewer.grid.stride == 1260 translations = [layer._translate_grid for layer in viewer.layers]261 expected_translations = np.zeros((6, 2))262 np.testing.assert_allclose(translations, expected_translations)263 # check screenshot264 screenshot = viewer.screenshot(canvas_only=True, flash=False)265 center = tuple(np.round(np.divide(screenshot.shape[:2], 2)).astype(int))266 np.testing.assert_almost_equal(screenshot[center], [0, 255, 255, 255])267@skip_on_win_ci268@skip_local_popups269def test_changing_image_attenuation(make_napari_viewer):270 """Test changing attenuation value changes rendering."""271 data = np.zeros((100, 10, 10))272 data[-1] = 1273 viewer = make_napari_viewer(show=True)274 viewer.dims.ndisplay = 3275 viewer.add_image(data, contrast_limits=[0, 1])276 # normal mip277 viewer.layers[0].rendering = 'mip'278 screenshot = viewer.screenshot(canvas_only=True, flash=False)279 center = tuple(np.round(np.divide(screenshot.shape[:2], 2)).astype(int))280 mip_value = screenshot[center][0]281 # zero attenuation (still attenuated!)282 viewer.layers[0].rendering = 'attenuated_mip'283 viewer.layers[0].attenuation = 0.0284 screenshot = viewer.screenshot(canvas_only=True, flash=False)285 zero_att_value = screenshot[center][0]286 # increase attenuation287 viewer.layers[0].attenuation = 0.5288 screenshot = viewer.screenshot(canvas_only=True, flash=False)289 more_att_value = screenshot[center][0]290 # Check that rendering has been attenuated291 assert zero_att_value < more_att_value < mip_value292@skip_on_win_ci293@skip_local_popups294def test_labels_painting(make_napari_viewer):295 """Test painting labels updates image."""296 data = np.zeros((100, 100), dtype=np.int32)297 viewer = make_napari_viewer(show=True)298 viewer.add_labels(data)299 layer = viewer.layers[0]300 screenshot = viewer.screenshot(canvas_only=True, flash=False)301 # Check that no painting has occurred302 assert layer.data.max() == 0303 assert screenshot[:, :, :2].max() == 0304 # Enter paint mode305 viewer.cursor.position = (0, 0)306 layer.mode = 'paint'307 layer.selected_label = 3308 # Simulate click309 Event = collections.namedtuple(310 'Event', field_names=['type', 'is_dragging', 'position']311 )312 # Simulate click313 event = ReadOnlyWrapper(314 Event(315 type='mouse_press',316 is_dragging=False,317 position=viewer.cursor.position,318 )319 )320 mouse_press_callbacks(layer, event)321 viewer.cursor.position = (100, 100)322 # Simulate drag323 event = ReadOnlyWrapper(324 Event(325 type='mouse_move',326 is_dragging=True,327 position=viewer.cursor.position,328 )329 )330 mouse_move_callbacks(layer, event)331 # Simulate release332 event = ReadOnlyWrapper(333 Event(334 type='mouse_release',335 is_dragging=False,336 position=viewer.cursor.position,337 )338 )339 mouse_release_callbacks(layer, event)340 event = ReadOnlyWrapper(341 Event(342 type='mouse_press',343 is_dragging=False,344 position=viewer.cursor.position,345 )346 )347 mouse_press_callbacks(layer, event)348 screenshot = viewer.screenshot(canvas_only=True, flash=False)349 # Check that painting has now occurred350 assert layer.data.max() > 0351 assert screenshot[:, :, :2].max() > 0352@pytest.mark.skip("Welcome visual temporarily disabled")353@skip_on_win_ci354@skip_local_popups355def test_welcome(make_napari_viewer):356 """Test that something visible on launch."""357 viewer = make_napari_viewer(show=True)358 # Check something is visible359 screenshot = viewer.screenshot(canvas_only=True, flash=False)360 assert len(viewer.layers) == 0361 assert screenshot[..., :-1].max() > 0362 # Check adding zeros image makes it go away363 viewer.add_image(np.zeros((1, 1)))364 screenshot = viewer.screenshot(canvas_only=True, flash=False)365 assert len(viewer.layers) == 1366 assert screenshot[..., :-1].max() == 0367 # Remove layer and check something is visible again368 viewer.layers.pop(0)369 screenshot = viewer.screenshot(canvas_only=True, flash=False)370 assert len(viewer.layers) == 0371 assert screenshot[..., :-1].max() > 0372@skip_on_win_ci373@skip_local_popups374def test_axes_visible(make_napari_viewer):375 """Test that something appears when axes become visible."""376 viewer = make_napari_viewer(show=True)377 viewer.window._qt_viewer.set_welcome_visible(False)378 # Check axes are not visible379 launch_screenshot = viewer.screenshot(canvas_only=True, flash=False)380 assert not viewer.axes.visible381 # Make axes visible and check something is seen382 viewer.axes.visible = True383 on_screenshot = viewer.screenshot(canvas_only=True, flash=False)384 assert viewer.axes.visible385 assert abs(on_screenshot - launch_screenshot).max() > 0386 # Make axes not visible and check they are gone387 viewer.axes.visible = False388 off_screenshot = viewer.screenshot(canvas_only=True, flash=False)389 assert not viewer.axes.visible390 np.testing.assert_almost_equal(launch_screenshot, off_screenshot)391@skip_on_win_ci392@skip_local_popups393def test_scale_bar_visible(make_napari_viewer):394 """Test that something appears when scale bar becomes visible."""395 viewer = make_napari_viewer(show=True)396 viewer.window._qt_viewer.set_welcome_visible(False)397 # Check scale bar is not visible398 launch_screenshot = viewer.screenshot(canvas_only=True, flash=False)399 assert not viewer.scale_bar.visible400 # Make scale bar visible and check something is seen401 viewer.scale_bar.visible = True402 on_screenshot = viewer.screenshot(canvas_only=True, flash=False)403 assert viewer.scale_bar.visible404 assert abs(on_screenshot - launch_screenshot).max() > 0405 # Make scale bar not visible and check it is gone406 viewer.scale_bar.visible = False407 off_screenshot = viewer.screenshot(canvas_only=True, flash=False)408 assert not viewer.scale_bar.visible409 np.testing.assert_almost_equal(launch_screenshot, off_screenshot)410@skip_on_win_ci411@skip_local_popups412def test_screenshot_has_no_border(make_napari_viewer):413 """See https://github.com/napari/napari/issues/3357"""414 viewer = make_napari_viewer(show=True)415 image_data = np.ones((60, 80))416 viewer.add_image(image_data, colormap='red')417 # Zoom in dramatically to make the screenshot all red.418 viewer.camera.zoom = 1000419 screenshot = viewer.screenshot(canvas_only=True, flash=False)420 expected = np.broadcast_to([255, 0, 0, 255], screenshot.shape)...
test_screenshot.py
Source:test_screenshot.py
...54 self.assertEqual(imghdr.what("", image), "png")55 def assert_formats(self, element=None):56 if element is None:57 element = self.document_element58 screenshot_default = self.marionette.screenshot(element=element)59 screenshot_image = self.marionette.screenshot(element=element, format="base64")60 binary1 = self.marionette.screenshot(element=element, format="binary")61 binary2 = self.marionette.screenshot(element=element, format="binary")62 hash1 = self.marionette.screenshot(element=element, format="hash")63 hash2 = self.marionette.screenshot(element=element, format="hash")64 # Valid data should have been returned65 self.assert_png(screenshot_image)66 self.assertEqual(imghdr.what("", binary1), "png")67 self.assertEqual(screenshot_image, base64.b64encode(binary1))68 self.assertEqual(hash1, hashlib.sha256(screenshot_image).hexdigest())69 # Different formats produce different data70 self.assertNotEqual(screenshot_image, binary1)71 self.assertNotEqual(screenshot_image, hash1)72 self.assertNotEqual(binary1, hash1)73 # A second capture should be identical74 self.assertEqual(screenshot_image, screenshot_default)75 self.assertEqual(binary1, binary2)76 self.assertEqual(hash1, hash2)77 def get_element_dimensions(self, element):78 rect = element.rect79 return rect["width"], rect["height"]80 def get_image_dimensions(self, screenshot):81 self.assert_png(screenshot)82 image = base64.decodestring(screenshot)83 width, height = struct.unpack(">LL", image[16:24])84 return int(width), int(height)85 def scale(self, rect):86 return (int(rect[0] * self.device_pixel_ratio),87 int(rect[1] * self.device_pixel_ratio))88class TestScreenCaptureChrome(WindowManagerMixin, ScreenCaptureTestCase):89 def setUp(self):90 super(TestScreenCaptureChrome, self).setUp()91 self.marionette.set_context("chrome")92 def tearDown(self):93 self.close_all_windows()94 super(TestScreenCaptureChrome, self).tearDown()95 @property96 def window_dimensions(self):97 return tuple(self.marionette.execute_script("""98 let el = document.documentElement;99 let rect = el.getBoundingClientRect();100 return [rect.width, rect.height];101 """))102 def open_dialog(self, url=None, width=None, height=None):103 if url is None:104 url = "chrome://marionette/content/test_dialog.xul"105 def opener():106 features = "chrome"107 if height is not None:108 features += ",height={}".format(height)109 if width is not None:110 features += ",width={}".format(width)111 self.marionette.execute_script("""112 window.open(arguments[0], "", arguments[1]);113 """, script_args=[url, features])114 return self.open_window(opener)115 def test_capture_different_context(self):116 """Check that screenshots in content and chrome are different."""117 with self.marionette.using_context("content"):118 screenshot_content = self.marionette.screenshot()119 screenshot_chrome = self.marionette.screenshot()120 self.assertNotEqual(screenshot_content, screenshot_chrome)121 @skip_if_mobile("Fennec doesn't support other chrome windows")122 def test_capture_element(self):123 dialog = self.open_dialog()124 self.marionette.switch_to_window(dialog)125 # Ensure we only capture the element126 el = self.marionette.find_element(By.ID, "test-list")127 screenshot_element = self.marionette.screenshot(element=el)128 self.assertEqual(self.scale(self.get_element_dimensions(el)),129 self.get_image_dimensions(screenshot_element))130 # Ensure we do not capture the full window131 screenshot_dialog = self.marionette.screenshot()132 self.assertNotEqual(screenshot_dialog, screenshot_element)133 self.marionette.close_chrome_window()134 self.marionette.switch_to_window(self.start_window)135 @skip_if_mobile("Fennec doesn't support other chrome windows")136 def test_capture_flags(self):137 dialog = self.open_dialog()138 self.marionette.switch_to_window(dialog)139 textbox = self.marionette.find_element(By.ID, "text-box")140 textbox.send_keys("")141 screenshot_focus = self.marionette.screenshot()142 self.marionette.execute_script("arguments[0].blur();", script_args=[textbox])143 screenshot_no_focus = self.marionette.screenshot()144 self.marionette.close_chrome_window()145 self.marionette.switch_to_window(self.start_window)146 self.assertNotEqual(screenshot_focus, screenshot_no_focus)147 def test_capture_full_area(self):148 # A full capture is not the outer dimensions of the window,149 # but instead the bounding box of the window's root node (documentElement).150 screenshot_full = self.marionette.screenshot()151 screenshot_root = self.marionette.screenshot(element=self.document_element)152 self.assert_png(screenshot_full)153 self.assert_png(screenshot_root)154 self.assertEqual(screenshot_root, screenshot_full)155 self.assertEqual(self.scale(self.get_element_dimensions(self.document_element)),156 self.get_image_dimensions(screenshot_full))157 @skip_if_mobile("Fennec doesn't support other chrome windows")158 def test_capture_viewport(self):159 # Load a HTML test page into the chrome window to get scrollbars160 test_page = self.marionette.absolute_url("test.html")161 dialog = self.open_dialog(url=test_page, width=50, height=50)162 self.marionette.switch_to_window(dialog)163 # Size of screenshot has to match viewport size164 screenshot = self.marionette.screenshot(full=False)165 self.assert_png(screenshot)166 self.assertEqual(self.scale(self.viewport_dimensions),167 self.get_image_dimensions(screenshot))168 self.assertNotEqual(self.scale(self.window_dimensions),169 self.get_image_dimensions(screenshot))170 self.marionette.close_chrome_window()171 self.marionette.switch_to_window(self.start_window)172 @skip_if_mobile("Fennec doesn't support other chrome windows")173 def test_capture_window_already_closed(self):174 dialog = self.open_dialog()175 self.marionette.switch_to_window(dialog)176 self.marionette.close_chrome_window()177 self.assertRaises(NoSuchWindowException, self.marionette.screenshot)178 self.marionette.switch_to_window(self.start_window)179 @skip_if_mobile("Fennec doesn't support other chrome windows")180 def test_formats(self):181 dialog = self.open_dialog()182 self.marionette.switch_to_window(dialog)183 self.assert_formats()184 self.marionette.close_chrome_window()185 self.marionette.switch_to_window(self.start_window)186 def test_format_unknown(self):187 with self.assertRaises(ValueError):188 self.marionette.screenshot(format="cheese")189 @skip_if_mobile("Fennec doesn't support other chrome windows")190 def test_highlight_elements(self):191 dialog = self.open_dialog()192 self.marionette.switch_to_window(dialog)193 # Highlighting the element itself shouldn't make the image larger194 element = self.marionette.find_element(By.ID, "test-list")195 screenshot_element = self.marionette.screenshot(element=element)196 screenshot_highlight = self.marionette.screenshot(element=element,197 highlights=[element])198 self.assertEqual(self.scale(self.get_element_dimensions(element)),199 self.get_image_dimensions(screenshot_element))200 self.assertNotEqual(screenshot_element, screenshot_highlight)201 # Highlighting a sub element202 button = self.marionette.find_element(By.ID, "choose-button")203 screenshot_highlight_button = self.marionette.screenshot(element=element,204 highlights=[button])205 self.assertNotEqual(screenshot_element, screenshot_highlight_button)206 self.assertNotEqual(screenshot_highlight, screenshot_highlight_button)207 self.marionette.close_chrome_window()208 self.marionette.switch_to_window(self.start_window)209 def test_highlight_element_not_seen(self):210 """Check that for not found elements an exception is raised."""211 with self.marionette.using_context('content'):212 self.marionette.navigate(box)213 content_element = self.marionette.find_element(By.ID, "green")214 self.assertRaisesRegexp(JavascriptException, "Element reference not seen before",215 self.marionette.screenshot, highlights=[content_element])216 chrome_document_element = self.document_element217 with self.marionette.using_context('content'):218 self.assertRaisesRegexp(JavascriptException, "Element reference not seen before",219 self.marionette.screenshot,220 highlights=[chrome_document_element])221class TestScreenCaptureContent(WindowManagerMixin, ScreenCaptureTestCase):222 def setUp(self):223 super(TestScreenCaptureContent, self).setUp()224 self.marionette.set_context("content")225 def tearDown(self):226 self.close_all_tabs()227 super(TestScreenCaptureContent, self).tearDown()228 @property229 def scroll_dimensions(self):230 return tuple(self.marionette.execute_script("""231 return [document.body.scrollWidth, document.body.scrollHeight]232 """))233 @skip_if_mobile("Needs application independent method to open a new tab")234 def test_capture_tab_already_closed(self):235 tab = self.open_tab()236 self.marionette.switch_to_window(tab)237 self.marionette.close()238 self.assertRaises(NoSuchWindowException, self.marionette.screenshot)239 self.marionette.switch_to_window(self.start_tab)240 def test_capture_element(self):241 self.marionette.navigate(box)242 el = self.marionette.find_element(By.TAG_NAME, "div")243 screenshot = self.marionette.screenshot(element=el)244 self.assert_png(screenshot)245 self.assertEqual(self.scale(self.get_element_dimensions(el)),246 self.get_image_dimensions(screenshot))247 @skip("Bug 1213875")248 def test_capture_element_scrolled_into_view(self):249 self.marionette.navigate(long)250 el = self.marionette.find_element(By.TAG_NAME, "p")251 screenshot = self.marionette.screenshot(element=el)252 self.assert_png(screenshot)253 self.assertEqual(self.scale(self.get_element_dimensions(el)),254 self.get_image_dimensions(screenshot))255 self.assertGreater(self.page_y_offset, 0)256 @skip("Bug 1330560 - AssertionError: u'iVBORw0KGgoA... (images unexpectedly equal)")257 def test_capture_flags(self):258 self.marionette.navigate(input)259 textbox = self.marionette.find_element(By.ID, "text-input")260 textbox.send_keys("")261 screenshot_focus = self.marionette.screenshot()262 self.marionette.execute_script("arguments[0].blur();", script_args=[textbox])263 screenshot_no_focus = self.marionette.screenshot()264 self.assertNotEqual(screenshot_focus, screenshot_no_focus)265 @skip_if_mobile("Bug 1330642 - Tuples differ: (1960, 11130) != (1960, 11129)")266 def test_capture_html_document_element(self):267 self.marionette.navigate(long)268 screenshot = self.marionette.screenshot()269 self.assert_png(screenshot)270 self.assertEqual(self.scale(self.scroll_dimensions),271 self.get_image_dimensions(screenshot))272 def test_capture_svg_document_element(self):273 self.marionette.navigate(svg)274 screenshot = self.marionette.screenshot()275 self.assert_png(screenshot)276 self.assertEqual(self.scale(self.get_element_dimensions(self.document_element)),277 self.get_image_dimensions(screenshot))278 def test_capture_viewport(self):279 url = self.marionette.absolute_url("clicks.html")280 self.marionette.navigate(short)281 self.marionette.navigate(url)282 screenshot = self.marionette.screenshot(full=False)283 self.assert_png(screenshot)284 self.assertEqual(self.scale(self.viewport_dimensions),285 self.get_image_dimensions(screenshot))286 def test_capture_viewport_after_scroll(self):287 self.marionette.navigate(long)288 before = self.marionette.screenshot()289 el = self.marionette.find_element(By.TAG_NAME, "p")290 self.marionette.execute_script(291 "arguments[0].scrollIntoView()", script_args=[el])292 after = self.marionette.screenshot(full=False)293 self.assertNotEqual(before, after)294 self.assertGreater(self.page_y_offset, 0)295 def test_formats(self):296 self.marionette.navigate(box)297 # Use a smaller region to speed up the test298 element = self.marionette.find_element(By.TAG_NAME, "div")299 self.assert_formats(element=element)300 def test_format_unknown(self):301 with self.assertRaises(ValueError):302 self.marionette.screenshot(format="cheese")303 def test_highlight_elements(self):304 self.marionette.navigate(box)305 element = self.marionette.find_element(By.TAG_NAME, "div")306 # Highlighting the element itself shouldn't make the image larger307 screenshot_element = self.marionette.screenshot(element=element)308 screenshot_highlight = self.marionette.screenshot(element=element,309 highlights=[element])310 self.assertEqual(self.scale(self.get_element_dimensions(element)),311 self.get_image_dimensions(screenshot_highlight))312 self.assertNotEqual(screenshot_element, screenshot_highlight)313 # Highlighting a sub element314 paragraph = self.marionette.find_element(By.ID, "green")315 screenshot_highlight_paragraph = self.marionette.screenshot(element=element,316 highlights=[paragraph])317 self.assertNotEqual(screenshot_element, screenshot_highlight_paragraph)318 self.assertNotEqual(screenshot_highlight, screenshot_highlight_paragraph)319 def test_scroll_default(self):320 self.marionette.navigate(long)321 before = self.page_y_offset322 el = self.marionette.find_element(By.TAG_NAME, "p")323 self.marionette.screenshot(element=el, format="hash")324 self.assertNotEqual(before, self.page_y_offset)325 def test_scroll(self):326 self.marionette.navigate(long)327 before = self.page_y_offset328 el = self.marionette.find_element(By.TAG_NAME, "p")329 self.marionette.screenshot(element=el, format="hash", scroll=True)330 self.assertNotEqual(before, self.page_y_offset)331 def test_scroll_off(self):332 self.marionette.navigate(long)333 el = self.marionette.find_element(By.TAG_NAME, "p")334 before = self.page_y_offset335 self.marionette.screenshot(element=el, format="hash", scroll=False)336 self.assertEqual(before, self.page_y_offset)337 def test_scroll_no_element(self):338 self.marionette.navigate(long)339 before = self.page_y_offset340 self.marionette.screenshot(format="hash", scroll=True)...
LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!