Best JavaScript code snippet using playwright-internal
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)...
csvparser.py
Source:csvparser.py
1import csv2import os3from shutil import copyfile4from PIL import Image5class CSVParser:6 eyevido_ds = dict()7 id_mapping = dict()8 merged_mouse_data = []9 merged_gaze_data = []10 def csv_import(self):11 # print('import started')12 path = 'csv_in/'13 listing = os.listdir(path)14 for file in listing:15 fn = file[:-7]16 if fn not in self.eyevido_ds.keys():17 with open(path + file) as f:18 i = 019 for line in f:20 line = line[:-1]21 vals = []22 if line.find('"') == -1:23 vals = line.split(',')24 else:25 lines = line.split(',"')26 for l in lines:27 if l.find('"') == -1:28 vals = vals + l.split(',')29 else:30 vals.append(l.split('"')[0])31 temp = l.split('"')[1]32 if temp.startswith(','):33 temp = temp[1:]34 temp = temp.split(',')35 vals = vals + temp36 if i == 0:37 self.eyevido_ds[fn] = dict()38 self.eyevido_ds[fn]['label'] = vals39 self.eyevido_ds[fn]['values'] = []40 else:41 self.eyevido_ds[fn]['values'].append(vals)42 i += 143 # print('import finished')44 def csv_export(self):45 print('export started')46 global_gaze_out = dict()47 global_mouse_out = dict()48 global_screenshot_mapping = []49 metadata = []50 # iterate over web_groups51 for web_group in self.eyevido_ds['web_groups']['values']:52 mouse_out = []53 gaze_out = []54 max_screen = -155 # iterate over web_results56 for web_result in self.eyevido_ds['web_results']['values']:57 if web_result[3][:-2] == web_group[0]:58 print('load web_result ' + web_result[0] + ' in web_group ' + web_group[0])59 # iterate over mouse data60 for interaction in self.eyevido_ds['interactions']['values']:61 if interaction[1] == web_result[0]:62 # user; timestamp; x; y; type63 mouse_out.append(64 [web_result[1], interaction[2], interaction[3], interaction[4], interaction[5]])65 # iterate over gaze data66 for image_fixation in self.eyevido_ds['image_fixations']['values']:67 if image_fixation[1] == web_result[0]:68 # user; timestamp; x; y; duration69 gaze_out.append([web_result[1], image_fixation[2], image_fixation[3], image_fixation[4],70 image_fixation[5]])71 try:72 if max_screen != -1:73 if os.path.getsize('screenshots/' + web_result[8]) >= os.path.getsize(74 'screenshots/' + max_screen):75 max_screen = web_result[8]76 else:77 if os.path.isfile('screenshots/' + web_result[8]):78 max_screen = web_result[8]79 else:80 pass81 except FileNotFoundError:82 pass83 # web_group_id; web_id; study_id; url to screenshot84 if max_screen == -1:85 max_screen = 'NULL'86 if max_screen != 'NULL':87 screenshot_pil = Image.open('screenshots/' + max_screen)88 screenshot_width, screenshot_height = screenshot_pil.size89 self.id_mapping[web_group[0]] = self.aux_create_filename(web_group[2])90 study_id = self.aux_find_study_id(web_group[2])91 global_screenshot_mapping.append(92 [web_group[0], web_group[2], study_id, max_screen, screenshot_width,93 screenshot_height])94 # TODO: implement95 # study_id; study_title; web_id; web_title; web_group_id; web_group_title; url; screenshot; width; height; num_user96 metadata.append(97 [study_id, web_group[2], web_group[0], self.id_mapping[web_group[0]], web_group[1], max_screen,98 screenshot_width, screenshot_height])99 global_mouse_out[web_group[0]] = mouse_out100 for elem in mouse_out:101 # study_id; web_id; web_group_id; filename; user; timestamp; x; y; type102 self.merged_mouse_data.append(103 [study_id, web_group[2], web_group[0], self.id_mapping[web_group[0]],104 elem[0], elem[1], elem[2], elem[3], elem[4]])105 global_gaze_out[web_group[0]] = gaze_out106 for elem in gaze_out:107 # study_id; web_id; web_group_id; filename; user; timestamp; x; y; duration108 self.merged_gaze_data.append(109 [study_id, web_group[2], web_group[0], self.id_mapping[web_group[0]],110 elem[0], elem[1], elem[2], elem[3], elem[4]])111 copyfile('screenshots/' + max_screen, 'screenshot_out/img_' + self.id_mapping[web_group[0]] + '.jpg')112 # iterate over web_result to find the single group results113 for web_result in self.eyevido_ds['web_results']['values']:114 mouse_out = []115 gaze_out = []116 if web_result[3] == '':117 virtual_web_group_id = web_result[1] + web_result[0]118 print('load web_result ' + web_result[0] + ' in virtual_single_node ' + virtual_web_group_id)119 # iterate over mouse data120 for interaction in self.eyevido_ds['interactions']['values']:121 if interaction[1] == web_result[0]:122 # user; timestamp; x; y; type123 mouse_out.append(124 [web_result[1], interaction[2], interaction[3], interaction[4], interaction[5]])125 # iterate over gaze data126 for image_fixation in self.eyevido_ds['image_fixations']['values']:127 if image_fixation[1] == web_result[0]:128 # user; timestamp; x; y; duration129 gaze_out.append(130 [web_result[1], image_fixation[2], image_fixation[3], image_fixation[4], image_fixation[5]])131 # check whether screenshot file exists132 if os.path.isfile('screenshots/' + web_result[8]):133 screenshot_url = web_result[8]134 screenshot_pil = Image.open('screenshots/' + screenshot_url)135 screenshot_width, screenshot_height = screenshot_pil.size136 else:137 screenshot_url = 'NULL'138 # web_group_id; web_id; study_id; url to screenshot139 if screenshot_url != 'NULL':140 self.id_mapping[virtual_web_group_id] = self.aux_create_filename(web_result[2])141 study_id = self.aux_find_study_id(web_result[2])142 global_screenshot_mapping.append(143 [virtual_web_group_id, web_result[2], study_id, screenshot_url,144 screenshot_width, screenshot_height])145 # TODO: implement146 # study_id; study_title; web_id; web_title; web_group_id; web_group_title; url; screenshot; width; height; num_user147 metadata.append(148 [study_id, web_result[2], virtual_web_group_id, self.id_mapping[virtual_web_group_id],149 web_result[5], screenshot_url, screenshot_width, screenshot_height])150 global_mouse_out[virtual_web_group_id] = mouse_out151 for elem in mouse_out:152 # study_id; web_id; web_group_id; filename; user; timestamp; x; y; type153 self.merged_mouse_data.append(154 [study_id, web_result[2], virtual_web_group_id, self.id_mapping[virtual_web_group_id],155 elem[0], elem[1], elem[2], elem[3], elem[4]])156 global_gaze_out[virtual_web_group_id] = gaze_out157 for elem in gaze_out:158 # study_id; web_id; web_group_id; filename; user; timestamp; x; y; duration159 self.merged_gaze_data.append(160 [study_id, web_result[2], virtual_web_group_id, self.id_mapping[virtual_web_group_id],161 elem[0], elem[1], elem[2], elem[3], elem[4]])162 copyfile('screenshots/' + web_result[8],163 'screenshot_out/img_' + self.id_mapping[virtual_web_group_id] + '.jpg')164 # iterate over mouse data and print csv files165 for mouse_out_key in global_mouse_out.keys():166 mouse_filename = 'csv_out/mouse_' + self.id_mapping[mouse_out_key] + '.csv'167 aux_write_file(mouse_filename, ['user_id', 'timestamp', 'x', 'y', 'type'],168 global_mouse_out[mouse_out_key])169 # iterate over gaze data and print csv files170 for gaze_out_key in global_gaze_out.keys():171 gaze_filename = 'csv_out/gaze_' + self.id_mapping[gaze_out_key] + '.csv'172 aux_write_file(gaze_filename, ['user_id', 'timestamp', 'x', 'y', 'duration'],173 global_gaze_out[gaze_out_key])174 # print screenshot mapping file175 aux_write_file('csv_out/screenshot_mapping.csv',176 ['web_group_id', 'web_id', 'study_id', 'screenshot', 'width', 'height'],177 global_screenshot_mapping)178 # print merged mouse data file179 aux_write_file('csv_out/merged_mouse.csv',180 ['study_id', 'web_id', 'web_group_id', 'filename', 'user_id', 'timestamp', 'x', 'y', 'type'],181 self.merged_mouse_data)182 # print merged gaze data file183 aux_write_file('csv_out/merged_gaze.csv',184 ['study_id', 'web_id', 'web_group_id', 'filename', 'user_id', 'timestamp', 'x', 'y', 'duration'],185 self.merged_gaze_data)186 # print metadata file187 aux_write_file('csv_out/metadata.csv',188 ['study_id', 'web_id', 'web_group_id', 'title', 'url', 'screenshot', 'width', 'height'],189 metadata)190 print('export finished')191 # helper function for finding study id192 def aux_find_study_id(self, web_id_in):193 for web_id in self.eyevido_ds['webs']['values']:194 if web_id[0] == web_id_in:195 return web_id[1]196 # helper function to check, wheater all screenshots are loaded197 def aux_check_files(self):198 listing = os.listdir('csv_out')199 g = []200 for file in listing:201 if file.startswith('gaze'):202 fn = file[5:-4]203 g.append(fn)204 listing = os.listdir('screenshot_out')205 s = []206 for file in listing:207 if file.startswith('img'):208 fn = file[4:-4]209 s.append(fn)210 print('compare screenshots and gaze files -> ' + str(bool(set(s).intersection(g))))211 # helper function that creates filenames212 def aux_create_filename(self, web_id):213 for web_shortcut in self.eyevido_ds['webs-shortcuts']['values']:214 if web_shortcut[0] == web_id:215 ws_prefix = str(web_shortcut[1]) + '_' + str(web_shortcut[2])216 i = 0217 for ws_id in self.id_mapping.values():218 if str(ws_id).startswith(ws_prefix):219 i += 1220 return ws_prefix + '_' + str(i)221# helper function for printing csv file222def aux_write_file(filename, schema, data):223 print('write ' + filename + ' with schema: ' + str(schema))224 with open(filename, 'w', newline='') as csvfile:225 w = csv.writer(csvfile, delimiter=';')226 w.writerow(schema)227 for elem in data:228 w.writerow(elem)229p = CSVParser()230p.csv_import()231p.csv_export()...
test_review_screenshot_comment.py
Source:test_review_screenshot_comment.py
...9 """10 if not comment_text:11 comment_text = "Test screenshot comment with an opened issue"12 review_request = self.create_review_request(publish=True, submitter=self.user)13 screenshot = self.create_screenshot(review_request)14 review = self.create_review(review_request, user=self.user, publish=publish)15 comment = self.create_screenshot_comment(review, screenshot, comment_text, issue_opened=True)16 return comment, review, review_request17@six.add_metaclass(BasicTestsMetaclass)18class ResourceListTests(CommentListMixin, ReviewRequestChildListMixin, BaseTestCase):19 """Testing the ReviewScreenshotCommentResource list APIs."""20 sample_api_url = "review-requests/<id>/reviews/<id>/screenshot-comments/"21 resource = resources.review_screenshot_comment22 def setup_review_request_child_test(self, review_request):23 self.create_screenshot(review_request)24 review = self.create_review(review_request, user=self.user)25 return (get_review_screenshot_comment_list_url(review), screenshot_comment_list_mimetype)26 def compare_item(self, item_rsp, comment):27 self.assertEqual(item_rsp["id"], comment.pk)28 self.assertEqual(item_rsp["text"], comment.text)29 self.assertEqual(item_rsp["x"], comment.x)30 self.assertEqual(item_rsp["y"], comment.y)31 self.assertEqual(item_rsp["w"], comment.w)32 self.assertEqual(item_rsp["h"], comment.h)33 self.assertEqual(item_rsp["extra_data"], comment.extra_data)34 if comment.rich_text:35 self.assertEqual(item_rsp["text_type"], "markdown")36 else:37 self.assertEqual(item_rsp["text_type"], "plain")38 def setup_basic_get_test(self, user, with_local_site, local_site_name, populate_items):39 review_request = self.create_review_request(with_local_site=with_local_site, submitter=user, publish=True)40 screenshot = self.create_screenshot(review_request)41 review = self.create_review(review_request, user=user)42 if populate_items:43 items = [self.create_screenshot_comment(review, screenshot)]44 else:45 items = []46 return (get_review_screenshot_comment_list_url(review, local_site_name), screenshot_comment_list_mimetype, items)47 def setup_basic_post_test(self, user, with_local_site, local_site_name, post_valid_data):48 review_request = self.create_review_request(with_local_site=with_local_site, submitter=user, publish=True)49 screenshot = self.create_screenshot(review_request)50 review = self.create_review(review_request, user=user)51 return (get_review_screenshot_comment_list_url(review, local_site_name), screenshot_comment_item_mimetype, {"screenshot_id": screenshot.pk, "text": "Test comment", "x": 2, "y": 2, "w": 10, "h": 10}, [review, screenshot])52 def check_post_result(self, user, rsp, review, screenshot):53 comment = ScreenshotComment.objects.get(pk=rsp["screenshot_comment"]["id"])54 self.compare_item(rsp["screenshot_comment"], comment)55 def test_post_with_issue(self):56 """Testing the57 POST review-requests/<id>/reviews/<id>/screenshot-comments/ API58 with an issue59 """60 comment_text = "Test screenshot comment with an opened issue"61 comment, review, review_request = self._create_screenshot_review_with_issue(publish=False, comment_text=comment_text)62 rsp = self.api_get(get_review_screenshot_comment_list_url(review), expected_mimetype=screenshot_comment_list_mimetype)63 self.assertEqual(rsp["stat"], "ok")64 self.assertIn("screenshot_comments", rsp)65 self.assertEqual(len(rsp["screenshot_comments"]), 1)66 self.assertEqual(rsp["screenshot_comments"][0]["text"], comment_text)67 self.assertTrue(rsp["screenshot_comments"][0]["issue_opened"])68@six.add_metaclass(BasicTestsMetaclass)69class ResourceItemTests(CommentItemMixin, ReviewRequestChildItemMixin, BaseTestCase):70 """Testing the ReviewScreenshotCommentResource item APIs."""71 fixtures = ["test_users"]72 sample_api_url = "review-requests/<id>/reviews/<id>/screenshot-comments/<id>/"73 resource = resources.review_screenshot_comment74 def compare_item(self, item_rsp, comment):75 self.assertEqual(item_rsp["id"], comment.pk)76 self.assertEqual(item_rsp["text"], comment.text)77 self.assertEqual(item_rsp["x"], comment.x)78 self.assertEqual(item_rsp["y"], comment.y)79 self.assertEqual(item_rsp["w"], comment.w)80 self.assertEqual(item_rsp["h"], comment.h)81 self.assertEqual(item_rsp["extra_data"], comment.extra_data)82 if comment.rich_text:83 self.assertEqual(item_rsp["text_type"], "markdown")84 else:85 self.assertEqual(item_rsp["text_type"], "plain")86 def setup_review_request_child_test(self, review_request):87 screenshot = self.create_screenshot(review_request)88 review = self.create_review(review_request, user=self.user)89 comment = self.create_screenshot_comment(review, screenshot)90 return (get_review_screenshot_comment_item_url(review, comment.pk), screenshot_comment_item_mimetype)91 def setup_basic_delete_test(self, user, with_local_site, local_site_name):92 review_request = self.create_review_request(with_local_site=with_local_site, submitter=user, publish=True)93 screenshot = self.create_screenshot(review_request)94 review = self.create_review(review_request, user=user)95 comment = self.create_screenshot_comment(review, screenshot)96 return (get_review_screenshot_comment_item_url(review, comment.pk, local_site_name), [comment, review])97 def check_delete_result(self, user, comment, review):98 self.assertNotIn(comment, review.screenshot_comments.all())99 def test_delete_with_does_not_exist_error(self):100 """Testing the101 DELETE review-requests/<id>/reviews/<id>/screenshot-comments/<id>/ API102 with Does Not Exist error103 """104 review_request = self.create_review_request(publish=True)105 self.create_screenshot(review_request)106 review = self.create_review(review_request, user=self.user)107 self.api_delete(get_review_screenshot_comment_item_url(review, 123), expected_status=404)108 def setup_basic_get_test(self, user, with_local_site, local_site_name):109 review_request = self.create_review_request(with_local_site=with_local_site, submitter=user, publish=True)110 screenshot = self.create_screenshot(review_request)111 review = self.create_review(review_request, user=user)112 comment = self.create_screenshot_comment(review, screenshot)113 return (get_review_screenshot_comment_item_url(review, comment.pk, local_site_name), screenshot_comment_item_mimetype, comment)114 def setup_basic_put_test(self, user, with_local_site, local_site_name, put_valid_data):115 review_request = self.create_review_request(with_local_site=with_local_site, submitter=user, publish=True)116 screenshot = self.create_screenshot(review_request)117 review = self.create_review(review_request, user=user)118 comment = self.create_screenshot_comment(review, screenshot)119 return (get_review_screenshot_comment_item_url(review, comment.pk, local_site_name), screenshot_comment_item_mimetype, {"text": "Test comment"}, comment, [])120 def check_put_result(self, user, item_rsp, comment, *args):121 comment = ScreenshotComment.objects.get(pk=comment.pk)122 self.assertEqual(item_rsp["text_type"], "plain")123 self.assertEqual(item_rsp["text"], "Test comment")124 self.compare_item(item_rsp, comment)125 def test_put_with_issue(self):126 """Testing the127 PUT review-requests/<id>/reviews/<id>/screenshot-comments/<id>/ API128 with an issue, removing issue_opened129 """130 comment, review, review_request = self._create_screenshot_review_with_issue()131 rsp = self.api_put(get_review_screenshot_comment_item_url(review, comment.pk), {"issue_opened": False}, expected_mimetype=screenshot_comment_item_mimetype)132 self.assertEqual(rsp["stat"], "ok")133 self.assertFalse(rsp["screenshot_comment"]["issue_opened"])134 def test_put_issue_status_before_publish(self):135 """Testing the136 PUT review-requests/<id>/reviews/<id>/screenshot-comments/<id> API137 with an issue, before review is published138 """139 comment, review, review_request = self._create_screenshot_review_with_issue()140 rsp = self.api_put(get_review_screenshot_comment_item_url(review, comment.pk), {"issue_status": "resolved"}, expected_mimetype=screenshot_comment_item_mimetype)141 self.assertEqual(rsp["stat"], "ok")142 self.assertEqual(rsp["screenshot_comment"]["issue_status"], "open")143 def test_put_issue_status_after_publish(self):144 """Testing the145 PUT review-requests/<id>/reviews/<id>/screenshot-comments/<id>/ API146 with an issue, after review is published147 """148 comment, review, review_request = self._create_screenshot_review_with_issue(publish=True)149 rsp = self.api_put(get_review_screenshot_comment_item_url(review, comment.pk), {"issue_status": "resolved"}, expected_mimetype=screenshot_comment_item_mimetype)150 self.assertEqual(rsp["stat"], "ok")151 self.assertEqual(rsp["screenshot_comment"]["issue_status"], "resolved")152 def test_put_issue_status_by_issue_creator(self):153 """Testing the154 PUT review-requests/<id>/reviews/<id>/screenshot-comments/<id>/ API155 permissions for issue creator156 """157 comment, review, review_request = self._create_screenshot_review_with_issue(publish=True)158 review_request.submitter = User.objects.get(username="doc")159 review_request.save()160 rsp = self.api_put(get_review_screenshot_comment_item_url(review, comment.pk), {"issue_status": "dropped"}, expected_mimetype=screenshot_comment_item_mimetype)161 self.assertEqual(rsp["stat"], "ok")162 self.assertEqual(rsp["screenshot_comment"]["issue_status"], "dropped")163 def test_put_issue_status_by_uninvolved_user(self):164 """Testing the165 PUT review-requests/<id>/reviews/<id>/screenshot-comments/<id>/ API166 permissions for an uninvolved user167 """168 comment, review, review_request = self._create_screenshot_review_with_issue(publish=True)169 new_owner = User.objects.get(username="doc")170 review_request.submitter = new_owner171 review_request.save()172 review.user = new_owner173 review.save()174 rsp = self.api_put(get_review_screenshot_comment_item_url(review, comment.pk), {"issue_status": "dropped"}, expected_status=403)175 self.assertEqual(rsp["stat"], "fail")176 self.assertEqual(rsp["err"]["code"], PERMISSION_DENIED.code)177 def test_put_deleted_screenshot_comment_issue_status(self):178 """Testing the179 PUT review-requests/<id>/reviews/<id>/screenshot-comments/<id>180 API with an issue and a deleted screenshot181 """182 comment_text = "Test screenshot comment with an opened issue"183 x, y, w, h = (2, 2, 10, 10)184 review_request = self.create_review_request(publish=True, submitter=self.user, target_people=[self.user])185 screenshot = self.create_screenshot(review_request)186 review = self.create_review(review_request, user=self.user)187 comment = self.create_screenshot_comment(review, screenshot, comment_text, x, y, w, h, issue_opened=True)188 rsp = self.api_put(get_review_screenshot_comment_item_url(review, comment.pk), {"issue_status": "resolved"}, expected_mimetype=screenshot_comment_item_mimetype)189 self.assertEqual(rsp["stat"], "ok")190 self.assertEqual(rsp["screenshot_comment"]["issue_status"], "open")191 review.public = True192 review.save()193 rsp = self.api_put(rsp["screenshot_comment"]["links"]["self"]["href"], {"issue_status": "resolved"}, expected_mimetype=screenshot_comment_item_mimetype)194 self.assertEqual(rsp["stat"], "ok")195 self.assertEqual(rsp["screenshot_comment"]["issue_status"], "resolved")196 self._delete_screenshot(review_request, screenshot)197 review_request.publish(review_request.submitter)198 rsp = self.api_put(rsp["screenshot_comment"]["links"]["self"]["href"], {"issue_status": "open"}, expected_mimetype=screenshot_comment_item_mimetype)199 self.assertEqual(rsp["stat"], "ok")...
areafinder.py
Source:areafinder.py
1#!/usr/bin/env python32import pyautogui as pg3# im = pg.screenshot(region=(600,635,720,150)) #local and online4# im = pg.screenshot(region=(965,635,355,150)) #online only5# im = pg.screenshot(region=(782,650,360,100)) #find public game6# im = pg.screenshot(region=(435, 335, 1050, 650)) #public game search7# im = pg.screenshot(region=(1480, 335, 135, 135)) # public game refresh X: 1550 Y: 4008# im = pg.screenshot(region=(782,350,360,100)) #Create Game Online9# im = pg.screenshot(region=(1600, 965, 280, 80)) #Confirm Host Game10# im = pg.screenshot(region=(590, 946, 200, 70)) # switch private to public11# im = pg.screenshot(region=(1182, 957, 130, 50)) #max lobby count12# im = pg.screenshot(region=(793, 712, 335, 196)) #start hosted lobby13# im = pg.screenshot(region=(420,88,1000,145)) #announcements X:464 Y:13314# im = pg.screenshot(region=(420,400,1000,280)) #Disconnected From Server15# im = pg.screenshot(region=(420,400,1000,280)) #Game ban for disconnecting X: Y:16# im = pg.screenshot(region=(420,400,1000,280)) #Matchmaker is full17# im = pg.screenshot(region=(420,400,1000,280)) #Game Session Is Full18# im = pg.screenshot(region=(420,400,1000,280)) #Game Session Kicked19# im = pg.screenshot(region=(420,400,1000,280)) #Game Session Banned20# im = pg.screenshot(region=(420,400,1000,280)) #Game Session Has Started21# im = pg.screenshot(region=(420,400,1000,280)) #Game Matchmacker Has Been Disconnected22# im = pg.screenshot(region=(420,400,1000,280)) #Server Closed to inactivity23# im = pg.screenshot(region=(420,400,1000,280)) #Game is not upto date24# im = pg.screenshot(region=(420,400,1000,280)) #Matchmaker disconnected25# im = pg.screenshot(region=(420,400,1000,280)) #Game not found26#im = pg.screenshot(region=(1650, 0, 125, 125)) #Game Comment Icon X:1518 Y:13027# im = pg.screenshot(region=(1650, 0, 125, 125)) #Game Comment Icon2 X:1518 Y:13028# im = pg.screenshot(region=(1450, 70, 125, 125)) # Meeting Game Comment Icon X: 1513 Y: 12829# im = pg.screenshot(region=(1450, 70, 125, 125)) # Meeting Game Comment Icon2 X:1513 Y: 12830# im = pg.screenshot(region=(1450, 70, 125, 125)) # open meeting game comment icon X: 1513 Y: 12831# im = pg.screenshot(region=(1680, 770, 210, 300)) #Play Again Button32# im = pg.screenshot(region=(290,910,205,55)) # Click Vote to skip33# im = pg.screenshot(region=(525, 890, 95, 95)) #Confirm Vote To Skip34# im = pg.screenshot(region=(270, 850, 1150, 130)) #Comment Box X: Y: 35# im = pg.screenshot(region=(1320, 875, 80, 75)) #Comment submit X: 1360 Y: 90636# im = pg.screenshot(region=(550, 100, 728, 88)) #Who is imposter X: Y: 37# im = pg.screenshot(region=(420,400,1000,280)) # game requires update X: 1513 Y: 12838# im = pg.screenshot(region=(420,400,1000,280)) #Packets no response39# im = pg.screenshot(region=(850,240,590,455)) #upload data X:959 Y: 65540# im = pg.screenshot(region=(850,310,575,400)) #download dataX:959 Y: 65541# im = pg.screenshot(region=(580,140,780,260)) #calibrate yellow distributor X:1234 Y:30642# im = pg.screenshot(region=(580,140,780,530)) #calibrate dark blue distributor X:1234 Y:58043# im = pg.screenshot(region=(580,140,780,800)) #calibrate light blue distributor X:1234 Y:83544#im = pg.screenshot(region=(375,88,1200,275)) #User is Imposter X: Y:45# im = pg.screenshot(region=(365,88,1200,275)) #User is crewmate X: Y:46# im = pg.screenshot(region=(909,477,99,121)) #Get user on screen X: Y:47#####For Keyboard Moving########48# im = pg.screenshot(region=(0,0,908,485)) #Screen Area 1 X: Y:49# im = pg.screenshot(region=(900,0,125,454)) #Screen Area 2 X: Y: 50# im = pg.screenshot(region=(1000,0,908,485)) #Screen Area 3 X: Y:51# im = pg.screenshot(region=(0,450,908,160)) #Screen Area 4 X: Y:52# im = pg.screenshot(region=(1012,450,908,160)) #Screen Area 5 X: Y:53# im = pg.screenshot(region=(0,580,908,500)) #Screen Area 6 X: Y:54# im = pg.screenshot(region=(900,580,125,500)) #Screen Area 7 X: Y: 55# im = pg.screenshot(region=(1000,580,908,500)) #Screen Area 8 X: Y:56#####For Keyboard Moving########57#im = pg.screenshot(region=(70,100,1600,890)) #Get area on screen for mouse moving X: Y:58# im = pg.screenshot(region=(0,0,1700,485)) #Top of screen X: Y:59# im = pg.screenshot(region=(0,300,908,450)) #Left side of screen X: Y:60im = pg.screenshot(region=(1012,300,700,450)) #Right side of screen X: Y:61# im = pg.screenshot(region=(0,580,1700,500)) #Bottom Of screenX: Y:62# Todo for tasks for the skeld63# admin swipe card64# weapons clear asteroids65# Electrical Divert Power66# Fix Wiring67# Medbay inspect sample68# Medbay Submit Scan69# Empty Garbage70# Navigation Stabilize Steering71# Align Engine output72# Clean o2 filter73# Fuel Engines74# Start Reactor75# Navigation chart course...
screenshot_utils.py
Source:screenshot_utils.py
...17 driver.maximize_window()18 screenshot = "./result/screenshot/"19 file_name = str(time.time())20 screenshot = screenshot + file_name + ".png"21 driver.save_screenshot(screenshot)22 time.sleep(3)23 allure.attach.file(screenshot, attachment_type=AttachmentType.PNG)24 time.sleep(2)25 except Exception as e:26 pass27def take_full_screenshot(driver, scenario_name):28 if(driver == None):29 return None30 driver.maximize_window()31 from Screenshot import Screenshot_Clipping32 screen_img_path = "./result/screenshot/"33 img_file_name = str(time.time())34 img_file_name = img_file_name + ".png"35 browserScreenShot = Screenshot_Clipping.Screenshot()36 img_url = browserScreenShot.full_Screenshot(driver, save_path=screen_img_path, image_name=img_file_name)37 # print(img_url)38 # allure.attach.file(source=img_url, name=scenario_name, attachment_type=AttachmentType.PNG)39 allure.attach.file(img_url, attachment_type=AttachmentType.PNG)40 # driver.quit()41def take_test_screen_shot(driver, scenario_name):42 import time43 import allure44 from allure_commons.types import AttachmentType45 if (driver == None):46 return None47 try:48 # time.sleep(5)49 # driver.maximize_window()50 screenshot = "./result/screenshot/"51 file_name = str(time.time())52 screenshot = screenshot + file_name + ".png"53 driver.save_screenshot(screenshot)54 time.sleep(3)55 allure.attach.file(screenshot, attachment_type=AttachmentType.PNG)56 time.sleep(2)57 except Exception as e:58 pass...
Using AI Code Generation
1const playwright = require('playwright');2(async () => {3 for (const browserType of BROWSER) {4 const browser = await playwright[browserType].launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 await page.screenshot({ path: `example-${browserType}.png` });8 await browser.close();9 }10})();11const playwright = require('playwright');12(async () => {13 for (const browserType of BROWSER) {14 const browser = await playwright[browserType].launch();15 const context = await browser.newContext();16 const page = await context.newPage();17 await page.screenshot({ path: `example-${browserType}.png` });18 await browser.close();19 }20})();21const playwright = require('playwright');22(async () => {23 for (const browserType of BROWSER) {24 const browser = await playwright[browserType].launch();25 const context = await browser.newContext();26 const page = await context.newPage();27 await page.screenshot({ path: `example-${browserType}.png` });28 await browser.close();29 }30})();31const playwright = require('playwright');32(async () => {33 for (const browserType of BROWSER) {34 const browser = await playwright[browserType].launch();35 const context = await browser.newContext();36 const page = await context.newPage();37 await page.screenshot({ path: `example-${browserType}.png` });38 await browser.close();39 }40})();41const playwright = require('playwright');42(async () => {43 for (const browserType of BROWSER) {44 const browser = await playwright[browserType].launch();45 const context = await browser.newContext();46 const page = await context.newPage();
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 await page.screenshot({ path: 'example.png' });7 await browser.close();8})();9const { chromium } = require('playwright');10(async () => {11 const browser = await chromium.launch();12 const context = await browser.newContext();13 const page = await context.newPage();14 await page.screenshot({ path: 'example.png' });15 await browser.close();16})();
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 await page.screenshot({ path: 'example.png' });7 await browser.close();8})();9const { chromium } = require('playwright');10(async () => {11 const browser = await chromium.launch();12 const context = await browser.newContext();13 const page = await context.newPage();14 await page.screenshot({ path: 'example.png' });15 await browser.close();16})();17const { chromium } = require('playwright');18(async () => {19 const browser = await chromium.launch();20 const context = await browser.newContext();21 const page = await context.newPage();22 await page.screenshot({ path: 'example.png' });23 await browser.close();24})();25const { chromium } = require('playwright');26(async () => {27 const browser = await chromium.launch();28 const context = await browser.newContext();29 const page = await context.newPage();30 await page.screenshot({ path: 'example.png' });31 await browser.close();32})();33const { chromium } = require('playwright');34(async () => {35 const browser = await chromium.launch();36 const context = await browser.newContext();37 const page = await context.newPage();38 await page.screenshot({ path: 'example.png' });39 await browser.close();40})();41const { chromium } = require('playwright');42(async () => {43 const browser = await chromium.launch();44 const context = await browser.newContext();45 const page = await context.newPage();46 await page.screenshot({
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 await page.screenshot({ path: 'example.png' });7 await browser.close();8})();9const playwright = require('playwright');10(async () => {11 for (const browserType of ['chromium', 'firefox', 'webkit']) {12 const browser = await playwright[browserType].launch();13 const context = await browser.newContext();14 const page = await context.newPage();15 await page.screenshot({ path: `example-${browserType}.png` });16 await browser.close();17 }18})();19const playwright = require('playwright');20(async () => {21 const browser = await playwright.chromium.launch();22 const context = await browser.newContext();23 const page = await context.newPage();24 await page.screenshot({ path: `example.png` });25 await browser.close();26})();27const playwright = require('playwright');28(async () => {29 const browser = await playwright.chromium.launch();30 const context = await browser.newContext();31 const page = await context.newPage();32 await page.screenshot({ path: `example.png` });33 await browser.close();34})();35const playwright = require('playwright');36(async () => {37 const browser = await playwright.chromium.launch();38 const context = await browser.newContext();39 const page = await context.newPage();40 await page.screenshot({ path: `example.png` });41 await browser.close();42})();43const playwright = require('playwright');44(async () => {45 const browser = await playwright.chromium.launch();46 const context = await browser.newContext();
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const page = await browser.newPage();5 await page.screenshot({ path: 'example.png' });6 await browser.close();7})();8const { chromium } = require('playwright');9(async () => {10 const browser = await chromium.launch();11 const page = await browser.newPage();12 await page.screenshot({ path: 'example.png' });13 await browser.close();14})();15const { chromium } = require('playwright');16(async () => {17 const browser = await chromium.launch();18 const page = await browser.newPage();19 await page.screenshot({ path: 'example.png' });20 await browser.close();21})();22const { chromium } = require('playwright');23(async () => {24 const browser = await chromium.launch();25 const page = await browser.newPage();26 await page.screenshot({ path: 'example.png' });27 await browser.close();28})();29const { chromium } = require('playwright');30(async () => {31 const browser = await chromium.launch();32 const page = await browser.newPage();33 await page.screenshot({ path: 'example.png' });34 await browser.close();35})();36const { chromium } = require('playwright');37(async () => {38 const browser = await chromium.launch();39 const page = await browser.newPage();40 await page.screenshot({ path: 'example.png' });41 await browser.close();42})();43const { chromium } = require('playwright');44(async () => {45 const browser = await chromium.launch();
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch({4 });5 const context = await browser.newContext();6 const page = await context.newPage();7 await page.screenshot({ path: 'example.png' });8 await browser.close();9})();
Using AI Code Generation
1const { chromium, firefox, webkit } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 await page.screenshot({ path: 'example.png' });7 await browser.close();8})();
Using AI Code Generation
1const playwright = require('playwright-internal');2(async () => {3 const browser = await playwright.chromium.launch();4 const page = await browser.newPage();5 await page.screenshot({ path: 'example.png' });6 await browser.close();7})();8const playwright = require('playwright');9(async () => {10 const browser = await playwright.chromium.launch();11 const page = await browser.newPage();12 await page.screenshot({ path: 'example.png' });13 await browser.close();14})();15const playwright = require('playwright');16(async () => {17 const browser = await playwright.chromium.launch();18 const page = await browser.newPage();19 await page.screenshot({ path: 'example.png' });20 await browser.close();21})();22const playwright = require('playwright');23(async () => {24 const browser = await playwright.chromium.launch();25 const page = await browser.newPage();26 await page.screenshot({ path: 'example.png' });27 await browser.close();28})();29const playwright = require('playwright');30(async () => {31 const browser = await playwright.chromium.launch();32 const page = await browser.newPage();33 await page.screenshot({ path: 'example.png' });34 await browser.close();35})();36const playwright = require('playwright');37(async () => {38 const browser = await playwright.chromium.launch();39 const page = await browser.newPage();40 await page.screenshot({ path: 'example.png' });41 await browser.close();42})();43const playwright = require('playwright');44(async () => {45 const browser = await playwright.chromium.launch();46 const page = await browser.newPage();
Using AI Code Generation
1const playwright = require('playwright');2const fs = require('fs');3const path = require('path');4(async () => {5 const browser = await playwright.chromium.launch();6 const context = await browser.newContext();7 const page = await context.newPage();8 const screenshot = await page.screenshot();9 fs.writeFileSync(path.join(__dirname, 'example.png'), screenshot);10 await browser.close();11})();
Using AI Code Generation
1const { screenshot } = require('@playwright/test/lib/server/screenshot');2const fs = require('fs');3const path = require('path');4const { chromium } = require('playwright');5(async () => {6 const browser = await chromium.launch();7 const context = await browser.newContext();8 const page = await context.newPage();9 const buffer = await screenshot(page, 'png', {});10 fs.writeFileSync(path.join(__dirname, 'screenshot.png'), buffer);11 await browser.close();12})();13const { test, expect } = require('@playwright/test');14test('basic test', async ({ page }) => {15 const image = await page.screenshot();16 expect(image).toMatchSnapshot('screenshot.png');17});18import { test, expect } from '@playwright/test';19test('basic test', async ({ page }) => {20 const image = await page.screenshot();21 expect(image).toMatchSnapshot('screenshot.png');22});23const { test, expect } = require('@playwright/test');24test('basic test', async ({ page }) => {25 const image = await page.screenshot();26 expect(image).toMatchSnapshot('screenshot.png');27});28import { test, expect } from '@playwright/test';29test('basic test', async ({ page }) => {30 const image = await page.screenshot();31 expect(image).toMatchSnapshot('screenshot.png');32});33const { test, expect } = require('@playwright/test');34test('basic test', async ({ page }) => {35 const image = await page.screenshot();36 expect(image).toMatchSnapshot('screenshot.png');37});38import { test, expect } from '@playwright/test';39test('basic test', async ({ page }) => {40 const image = await page.screenshot();41 expect(image).toMatchSnapshot('screenshot.png');42});43const { test, expect } = require
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!!