Best Python code snippet using pyscreenshot_python
status.py
Source:status.py  
1#!/usr/bin/python2#-*- coding:utf-8 -*-3# Copyright (C) 2011 ~ 2012 Deepin, Inc.4#               2011 ~ 2012 Long Changjin5# 6# Author:     Long Changjin <admin@longchangjin.cn>7# Maintainer: Long Changjin <admin@longchangjin.cn>8# 9# This program is free software: you can redistribute it and/or modify10# it under the terms of the GNU General Public License as published by11# the Free Software Foundation, either version 3 of the License, or12# any later version.13# 14# This program is distributed in the hope that it will be useful,15# but WITHOUT ANY WARRANTY; without even the implied warranty of16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the17# GNU General Public License for more details.18# 19# You should have received a copy of the GNU General Public License20# along with this program.  If not, see <http://www.gnu.org/licenses/>.21from constant import *22from action import *23import utils24class BaseProcess():25    ''' BaseProcess Class. it must be inherited and refactored'''26    def __init__(self, screenshot=None, window=None):27        '''28        init process29        @param screenshot: a Screenshot object30        @param window: a RootWindow object31        '''32        self.screenshot = screenshot33        self.win = window34        self.event = None35        self.func_map = {36            ACTION_INIT: self.action_init,37            ACTION_ARROW: self.action_arrow,38            ACTION_ELLIPSE: self.action_ellipse,39            ACTION_LINE: self.action_line,40            ACTION_RECTANGLE: self.action_rectangle,41            ACTION_SELECT: self.action_select,42            ACTION_TEXT: self.action_text,43            ACTION_WINDOW: self.action_window,44            None: self._none_action}45    46    def update(self, event):47        '''48        update event info49        @param event: a gtk.gdk.Event50        '''51        self.event = event52    53    def action_init(self, screenshot, event):54        '''55        process the in event in ACTION_INIT status56        @param screenshot: a Screenshot object57        @param event: a gtk.gdk.Event58        '''59        pass60    61    def action_arrow(self, screenshot, event):62        '''63        process the in event in ACTION_ARROW status64        @param screenshot: a Screenshot object65        @param event: a gtk.gdk.Event66        '''67        pass68    69    def action_ellipse(self, screenshot, event):70        '''71        process the in event in ACTION_ELLIPSE status72        @param screenshot: a Screenshot object73        @param event: a gtk.gdk.Event74        '''75        pass76    77    def action_line(self, screenshot, event):78        '''79        process the in event in ACTION_LINE status80        @param screenshot: a Screenshot object81        @param event: a gtk.gdk.Event82        '''83        pass84    85    def action_rectangle(self, screenshot, event):86        '''87        process the in event in ACTION_RECTANGLE status88        @param screenshot: a Screenshot object89        @param event: a gtk.gdk.Event90        '''91        pass92    93    def action_select(self, screenshot, event):94        '''95        process the in event in ACTION_SELECT status96        @param screenshot: a Screenshot object97        @param event: a gtk.gdk.Event98        '''99        pass100    101    def action_text(self, screenshot, event):102        '''103        process the in event in ACTION_TEXT status104        @param screenshot: a Screenshot object105        @param event: a gtk.gdk.Event106        '''107        pass108    109    def action_window(self, screenshot, event):110        '''111        process the in event in ACTION_WINDOW status112        @param screenshot: a Screenshot object113        @param event: a gtk.gdk.Event114        '''115        pass116    117    def _none_action(self, *arg):118        ''' process the in event in Action None status '''119        pass120    121class ButtonPressProcess(BaseProcess):122    ''' buton press status class'''123    def __init__(self, screenshot=None, window=None):124        BaseProcess.__init__(self, screenshot, window)125    def process(self):126        '''Press process button press event'''127        if self.event is None:128            return129        if self.screenshot.show_text_window_flag:130            allocation = self.screenshot.text_window.allocation131            text_view_x = allocation.x + self.screenshot.monitor_x132            text_view_y = allocation.y + self.screenshot.monitor_y133            # in text view area, ignore134            if text_view_x <= self.event.x_root <= text_view_x + allocation.width \135               and text_view_y <= self.event.y_root <= text_view_y + allocation.height:136                   return137        if self.event.button == BUTTON_EVENT_LEFT:138            self.screenshot.drag_flag = True139            self.func_map[self.screenshot.action](self.screenshot, self.event)140            self.adjust(self.screenshot, self.event)141        elif self.event.button == BUTTON_EVENT_RIGHT:142            ev = self.event143            screenshot = self.screenshot144            if screenshot.window_flag:  # has not select area, press right button quit145                self.win.quit()146            if is_in_rect((ev.x_root, ev.y_root), screenshot.get_rectangel()):147                self.win.make_menu((int(ev.x_root), int(ev.y_root)))      # popup menu148            else:149                while screenshot.action_list:150                    screenshot.action_list.pop()151                while screenshot.text_action_list:152                    screenshot.text_action_list.pop()153                screenshot.text_action_info.clear()154                screenshot.undo()155    156    def action_window(self, screenshot, event):157        '''Press ACTION_WINDOW '''158        screenshot.window_flag = False159    def action_init(self, screenshot, event):160        '''Press ACTION_INIT '''161        (screenshot.x, screenshot.y) = self.win.get_event_coord(event)162    def action_select(self, screenshot, event):163        '''Press ACTION_SELECT '''164        # Init drag position.165        screenshot.drag_position = self.win.get_position(event)166        # Set cursor.167        self.win.set_cursor(screenshot.drag_position)168        # Get drag coord and offset.169        (screenshot.dragStartX, screenshot.dragStartY) = self.win.get_event_coord(event)170        screenshot.dragStartOffsetX = screenshot.dragStartX - screenshot.x171        screenshot.dragStartOffsetY = screenshot.dragStartY - screenshot.y172    def action_rectangle(self, screenshot, event):173        '''Press ACTION_RECTANGLE '''174        # Just create new action when drag position at inside of select area.175        if self.win.get_position(event) == DRAG_INSIDE:176            screenshot.current_action = RectangleAction(ACTION_RECTANGLE, screenshot.action_size, screenshot.action_color)177            # calculate the coord in the window178            #event_coord = self.win.get_event_coord(event)179            #action_x = event_coord[0] - screenshot.monitor_x180            #action_y = event_coord[1] - screenshot.monitor_y181            (action_x, action_y) = self.win.get_event_coord_in_monitor(event)182            screenshot.current_action.start_draw((action_x, action_y))183    184    def action_ellipse(self, screenshot, event):185        '''Press ACTION_ELLIPSE '''186        # Just create new action when drag position at inside of select area.187        if self.win.get_position(event) == DRAG_INSIDE:188            screenshot.current_action = EllipseAction(ACTION_ELLIPSE, screenshot.action_size, screenshot.action_color)189            # calculate the coord in the window190            #event_coord = self.win.get_event_coord(event)191            #action_x = event_coord[0] - screenshot.monitor_x192            #action_y = event_coord[1] - screenshot.monitor_y193            (action_x, action_y) = self.win.get_event_coord_in_monitor(event)194            screenshot.current_action.start_draw((action_x, action_y))195    def action_arrow(self, screenshot, event):196        '''Press ACTION_ARROW '''197        # Just create new action when drag position at inside of select area.198        if self.win.get_position(event) == DRAG_INSIDE:199            screenshot.current_action = ArrowAction(ACTION_ARROW, screenshot.action_size, screenshot.action_color)200            # calculate the coord in the window201            #event_coord = self.win.get_event_coord(event)202            #action_x = event_coord[0] - screenshot.monitor_x203            #action_y = event_coord[1] - screenshot.monitor_y204            (action_x, action_y) = self.win.get_event_coord_in_monitor(event)205            screenshot.current_action.start_draw((action_x, action_y))206    def action_line(self, screenshot, event):207        '''Press ACTION_LINE '''208        # Just create new action when drag position at inside of select area.209        if self.win.get_position(event) == DRAG_INSIDE:210            screenshot.current_action = LineAction(ACTION_LINE, screenshot.action_size, screenshot.action_color)211            # calculate the coord in the window212            #event_coord = self.win.get_event_coord(event)213            #action_x = event_coord[0] - screenshot.monitor_x214            #action_y = event_coord[1] - screenshot.monitor_y215            (action_x, action_y) = self.win.get_event_coord_in_monitor(event)216            screenshot.current_action.start_draw((action_x, action_y))217    def action_text(self, screenshot, event):218        '''Press ACTION_TEXT '''219        if screenshot.show_text_window_flag:    # complete input text, changed action to None220            self.win.save_text_window()221            self.screenshot.toolbar.set_button_active("text", False)222            self.screenshot.current_text_action = None223        else:   # create a new text224            # calculate the coord in the window225            #event_coord = self.win.get_event_coord(event)226            #action_x = event_coord[0] - screenshot.monitor_x227            #action_y = event_coord[1] - screenshot.monitor_y228            (action_x, action_y) = self.win.get_event_coord_in_monitor(event)229            self.win.show_text_window((action_x, action_y))230    def adjust(self, screenshot, event):231        '''Press adjust '''232        if screenshot.action in [ACTION_RECTANGLE, ACTION_ELLIPSE, ACTION_ARROW, ACTION_LINE] \233            and screenshot.show_toolbar_flag \234            and screenshot.y < screenshot.toolbarY < screenshot.y + screenshot.rect_height:235                self.win.hide_toolbar()236                self.win.hide_colorbar()237        # drag text 238        if screenshot.current_text_action and screenshot.action is None:239            # calculate the coord in the window240            #event_coord = self.win.get_event_coord(event)241            #currentX = event_coord[0] - screenshot.monitor_x242            #currentY = event_coord[1] - screenshot.monitor_y243            currentX, currentY = self.win.get_event_coord_in_monitor(event)244            drawTextX,drawTextY = screenshot.current_text_action.get_layout_info()[:2]245            screenshot.textDragOffsetX = currentX - drawTextX246            screenshot.textDragOffsetY = currentY - drawTextY247            screenshot.text_drag_flag = True 248class ButtonReleaseProcess(BaseProcess):249    ''' button release process'''250    def __init__(self, screenshot=None, window=None):251        BaseProcess.__init__(self, screenshot, window)252        253    def process(self):254        '''Release process button release event'''255        if self.event is None:256            return257        if self.event.button == BUTTON_EVENT_LEFT:258            self.screenshot.text_drag_flag = False259            self.screenshot.drag_flag = False260            self.func_map[self.screenshot.action](self.screenshot, self.event)261            self.adjust(self.screenshot, self.event)262    def action_window(self, screenshot, event):263        '''Release ACTION_WINDOW'''264        if screenshot.rect_width > 5 and screenshot.rect_height > 5:265            self.win.show_toolbar()266            self.win.adjust_toolbar()267            screenshot.action = ACTION_SELECT268            self.win.refresh()269        else:270            screenshot.window_flag = True271            272    def action_init(self, screenshot, event):273        '''Release ACTION_INIT'''274        screenshot.action = ACTION_SELECT275        (ex, ey) = self.win.get_event_coord(event)276        # Adjust rectangle when button release.277        if ex > screenshot.x:278            screenshot.rect_width = ex - screenshot.x279        else:280            screenshot.rect_width = abs(ex - screenshot.x)281            screenshot.x = max(ex, screenshot.monitor_x)282        if ey > screenshot.y:283            screenshot.rect_height = ey - screenshot.y284        else:285            screenshot.rect_height = abs(ey - screenshot.y)286            screenshot.y = max(ey, screenshot.monitor_y)287        # min rect 2 * 2288        if screenshot.rect_width < 2:289            screenshot.rect_width = 2290            if screenshot.rect_width + screenshot.x > screenshot.width:291                screenshot.x = screenshot.width - screenshot.rect_width292        if screenshot.rect_height < 2:293            screenshot.rect_height = 2294            if screenshot.rect_height + screenshot.y > screenshot.height:295                screenshot.y = screenshot.height - screenshot.rect_height296        self.win.refresh()297        self.win.show_toolbar()298        self.win.adjust_toolbar()299    def action_select(self, screenshot, event):300        '''Release ACTION_SELECT '''301        # min rect 2 * 2302        if screenshot.rect_width < 2:303            screenshot.rect_width = 2304            if screenshot.rect_width + screenshot.x > screenshot.width:305                screenshot.x = screenshot.width - screenshot.rect_width306        if screenshot.rect_height < 2:307            screenshot.rect_height = 2308            if screenshot.rect_height + screenshot.y > screenshot.height:309                screenshot.y = screenshot.height - screenshot.rect_height310        self.win.refresh()311    312    def action_rectangle(self, screenshot, event):313        '''Release ACTION_RECTANGLE '''314        if screenshot.current_action:315            # calculate the coord in the window316            #event_coord = self.win.get_event_coord(event)317            #action_x = event_coord[0] - screenshot.monitor_x318            #action_y = event_coord[1] - screenshot.monitor_y319            (action_x, action_y) = self.win.get_event_coord_in_monitor(event)320            screenshot.current_action.end_draw((action_x, action_y), screenshot.get_rectangel_in_monitor())321            screenshot.action_list.append(screenshot.current_action)322            screenshot.current_action = None323            self.win.refresh()324    def action_ellipse(self, screenshot, event):325        '''Release ACTION_ELLIPSE '''326        if screenshot.current_action:327            #event_coord = self.win.get_event_coord(event)328            #action_x = event_coord[0] - screenshot.monitor_x329            #action_y = event_coord[1] - screenshot.monitor_y330            (action_x, action_y) = self.win.get_event_coord_in_monitor(event)331            screenshot.current_action.end_draw((action_x, action_y), screenshot.get_rectangel_in_monitor())332            screenshot.action_list.append(screenshot.current_action)333            screenshot.current_action = None334            self.win.refresh()335    def action_arrow(self, screenshot, event):336        '''Release ACTION_ARROW '''337        if screenshot.current_action:338            #event_coord = self.win.get_event_coord(event)339            #action_x = event_coord[0] - screenshot.monitor_x340            #action_y = event_coord[1] - screenshot.monitor_y341            (action_x, action_y) = self.win.get_event_coord_in_monitor(event)342            screenshot.current_action.end_draw((action_x, action_y), screenshot.get_rectangel_in_monitor())343            screenshot.action_list.append(screenshot.current_action)344            screenshot.current_action = None345            self.win.refresh()346    def action_line(self, screenshot, event):347        '''Release ACTION_LINE '''348        if screenshot.current_action:349            #event_coord = self.win.get_event_coord(event)350            #action_x = event_coord[0] - screenshot.monitor_x351            #action_y = event_coord[1] - screenshot.monitor_y352            (action_x, action_y) = self.win.get_event_coord_in_monitor(event)353            screenshot.current_action.end_draw((action_x, action_y), screenshot.get_rectangel_in_monitor())354            screenshot.action_list.append(screenshot.current_action)355            screenshot.current_action = None356            self.win.refresh()357        358    def adjust(self, screenshot, event):359        '''Release adjust '''360        if screenshot.action in [ACTION_RECTANGLE, ACTION_ELLIPSE, ACTION_ARROW, ACTION_LINE, ACTION_TEXT] \361            and not screenshot.show_toolbar_flag \362            and screenshot.y < screenshot.toolbarY < screenshot.y + screenshot.rect_height:363                self.win.show_toolbar()364                self.win.adjust_toolbar()365                self.win.show_colorbar()366                self.win.adjust_colorbar()367class MotionProcess(BaseProcess):368    ''' Motion process'''369    def __init__(self, screenshot=None, window=None):370        BaseProcess.__init__(self, screenshot, window)371        372    def process(self):373        '''Motion process motion event'''374        if self.event is None:375            return376        self.func_map[self.screenshot.action](self.screenshot, self.event)377        self.adjust(self.screenshot, self.event)378    def action_window(self, screenshot, event):379        '''Motion ACTION_WINDOW'''380        # can drag and has selected area381        if screenshot.drag_flag and not screenshot.window_flag:382            (ex, ey) = self.win.get_event_coord(event)383            screenshot.action = ACTION_INIT384            (screenshot.x, screenshot.y) = self.win.get_event_coord(event)385            self.win.refresh()386        else:   # update magnifier387            size = "%d x %d " % (screenshot.rect_width, screenshot.rect_height)388            rgb = utils.get_coord_rgb(screenshot, event.x, event.y)389            self.win.update_magnifier(event.x, event.y, size=size, rgb=str(rgb))390                391    def action_init(self, screenshot, event):392        '''Motion ACTION_INIT'''393        if screenshot.drag_flag:394            (ex, ey) = self.win.get_event_coord(event)395            (screenshot.rect_width, screenshot.rect_height) = (ex - screenshot.x, ey - screenshot.y)396            self.win.refresh()397        else:398            pass399    def action_select(self, screenshot, event):400        '''Motion ACTION_SELECT '''401        # drag the selected area402        if screenshot.drag_flag:403            (ex, ey) = self.win.get_event_coord(event)404            if screenshot.drag_position == DRAG_INSIDE:405                screenshot.x = min(max(ex - screenshot.dragStartOffsetX, screenshot.monitor_x),406                    screenshot.monitor_x + screenshot.width - screenshot.rect_width)407                screenshot.y = min(max(ey - screenshot.dragStartOffsetY, screenshot.monitor_y),408                    screenshot.monitor_y + screenshot.height - screenshot.rect_height)409            elif screenshot.drag_position == DRAG_TOP_SIDE:410                self.win.drag_frame_top(ex, ey)411            elif screenshot.drag_position == DRAG_BOTTOM_SIDE:412                self.win.drag_frame_bottom(ex, ey)413            elif screenshot.drag_position == DRAG_LEFT_SIDE:414                self.win.drag_frame_left(ex, ey)415            elif screenshot.drag_position == DRAG_RIGHT_SIDE:416                self.win.drag_frame_right(ex, ey)417            elif screenshot.drag_position == DRAG_TOP_LEFT_CORNER:418                self.win.drag_frame_top(ex, ey)419                self.win.drag_frame_left(ex, ey)420            elif screenshot.drag_position == DRAG_TOP_RIGHT_CORNER:421                self.win.drag_frame_top(ex, ey)422                self.win.drag_frame_right(ex, ey)423            elif screenshot.drag_position == DRAG_BOTTOM_LEFT_CORNER:424                self.win.drag_frame_bottom(ex, ey)425                self.win.drag_frame_left(ex, ey)426            elif screenshot.drag_position == DRAG_BOTTOM_RIGHT_CORNER:427                self.win.drag_frame_bottom(ex, ey)428                self.win.drag_frame_right(ex, ey)                      429            self.win.refresh()430            self.win.show_toolbar()431            self.win.adjust_toolbar()432        else:433            screenshot.drag_position = self.win.get_position(event)434            # to avoid set cursor again435            if screenshot.last_drag_position != screenshot.drag_position:436                screenshot.last_drag_position = screenshot.drag_position437                self.win.set_cursor(screenshot.drag_position)438                439    def action_rectangle(self, screenshot, event):440        '''Motion ACTION_RECTANGLE '''441        if screenshot.drag_flag and screenshot.current_action:442            #event_coord = self.win.get_event_coord(event)443            #ex = event_coord[0] - screenshot.monitor_x444            #ey = event_coord[1] - screenshot.monitor_y445            (ex, ey) = self.win.get_event_coord_in_monitor(event)446            screenshot.current_action.drawing((ex, ey), screenshot.get_rectangel_in_monitor())447            self.win.refresh()448        else:449            pass450    def action_ellipse(self, screenshot, event):451        '''Motion ACTION_ELLIPSE '''452        if screenshot.drag_flag and screenshot.current_action:453            #event_coord = self.win.get_event_coord(event)454            #ex = event_coord[0] - screenshot.monitor_x455            #ey = event_coord[1] - screenshot.monitor_y456            (ex, ey) = self.win.get_event_coord_in_monitor(event)457            screenshot.current_action.drawing((ex, ey), screenshot.get_rectangel_in_monitor())458            self.win.refresh()459        else:460            pass461    def action_arrow(self, screenshot, event):462        '''Motion ACTION_ARROW '''463        if screenshot.drag_flag and screenshot.current_action:464            #event_coord = self.win.get_event_coord(event)465            #ex = event_coord[0] - screenshot.monitor_x466            #ey = event_coord[1] - screenshot.monitor_y467            (ex, ey) = self.win.get_event_coord_in_monitor(event)468            screenshot.current_action.drawing((ex, ey), screenshot.get_rectangel_in_monitor())469            self.win.refresh()470        else:471            pass472    def action_line(self, screenshot, event):473        '''Motion ACTION_LINE '''474        if screenshot.drag_flag and screenshot.current_action:475            #event_coord = self.win.get_event_coord(event)476            #ex = event_coord[0] - screenshot.monitor_x477            #ey = event_coord[1] - screenshot.monitor_y478            (ex, ey) = self.win.get_event_coord_in_monitor(event)479            screenshot.current_action.drawing((ex, ey), screenshot.get_rectangel_in_monitor())480            self.win.refresh()481        else:482            pass483    def adjust(self, screenshot, event):484        '''Motion adjust '''485        # can't drag and has not selected area486        if not screenshot.drag_flag and screenshot.window_flag:487            self.win.hide_toolbar()488            (wx, wy) = self.win.get_event_coord(event)489            for each in screenshot.screenshot_window_info:490                if each.x <= wx <= (each.x + each.width) and each.y <= wy <= (each.y + each.height):491                    screenshot.x = each.x492                    screenshot.y = each.y493                    screenshot.rect_width = each.width494                    screenshot.rect_height = each.height495                    break496            self.win.refresh()497                498        # input text over499        if screenshot.action is None:500            (tx, ty) = self.win.get_event_coord_in_monitor(event)       501            # drag text502            if screenshot.text_drag_flag and screenshot.current_text_action:503                layout_info = screenshot.current_text_action.get_layout_info()504                des_x = tx - screenshot.textDragOffsetX505                des_y = ty - screenshot.textDragOffsetY506                if des_x < screenshot.x - screenshot.monitor_x:    # left507                    des_x = screenshot.x - screenshot.monitor_x508                elif des_x + layout_info[2] > screenshot.x - screenshot.monitor_x + screenshot.rect_width:     # right509                    des_x = screenshot.x - screenshot.monitor_x + screenshot.rect_width - layout_info[2]510                if des_y < screenshot.y - screenshot.monitor_y:    # top511                    des_y = screenshot.y - screenshot.monitor_y512                elif des_y + layout_info[3] > screenshot.y - screenshot.monitor_y + screenshot.rect_height:    # bottom513                    des_y = screenshot.y - screenshot.monitor_y + screenshot.rect_height - layout_info[3]514                screenshot.current_text_action.update_coord(des_x, des_y)515                screenshot.draw_text_layout_flag = True516                self.win.refresh()517            else:518                for each, info in screenshot.text_action_info.items():519                    if screenshot.text_drag_flag:   # has draged a text already520                        break521                    if info[0] <= tx <= info[0]+info[2] and info[1] <= ty <= info[1]+info[3]:522                        screenshot.current_text_action = each523                        524            if screenshot.current_text_action:525                drawTextX, drawTextY, drawTextWidth, drawTextHeight = screenshot.current_text_action.get_layout_info()526                if drawTextX <= tx <= drawTextX + drawTextWidth and drawTextY <= ty <= drawTextY + drawTextHeight:527                    screenshot.draw_text_layout_flag = True528                    self.win.set_cursor('drag')529                    self.win.refresh()530                elif not screenshot.text_drag_flag:     # drag text over, and not in text rectangle531                    screenshot.draw_text_layout_flag = False    532                    screenshot.current_text_action = None533                    self.win.set_cursor(screenshot.action)...screenshot.py
Source:screenshot.py  
1import time2import os3import shutil4from selenium import webdriver5import pyautogui6import os7from datetime import datetime8datestring = datetime.strftime(datetime.now(), '(%Y-%m-%d)-(%H.%M.ss)')9from selenium.webdriver.support import expected_conditions as EC10from selenium.webdriver.support.ui import WebDriverWait11from selenium.webdriver.common.by import By12from selenium.webdriver.support import expected_conditions as EC13from selenium import webdriver14from selenium.webdriver.chrome.options import Options15cwd = os.getcwd()16DRIVER = 'chromedriver'17chrome_options = webdriver.ChromeOptions()18if os.name == "nt":19    # If current OS is Windows20    chrome_options.add_argument("--start-maximized")21else:22    # Other OS (Mac / Linux)23    chrome_options.add_argument("--kiosk")24#------------------- create folder of the date-------------------25targetPath = os.path.join(cwd, 'FolderPNG');26while not os.path.exists(targetPath):27    os.mkdir(targetPath)28#-----------------------------------------------------------------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  
1import collections2import numpy as np3import pytest4from napari._tests.utils import (5    skip_local_popups,6    skip_on_mac_ci,7    skip_on_win_ci,8)9from napari.utils._proxies import ReadOnlyWrapper10from napari.utils.interactions import (11    mouse_move_callbacks,12    mouse_press_callbacks,13    mouse_release_callbacks,14)15@skip_on_win_ci16@skip_on_mac_ci17@skip_local_popups18def test_z_order_adding_removing_images(make_napari_viewer):19    """Test z order is correct after adding/ removing images."""20    data = np.ones((11, 11))21    viewer = make_napari_viewer(show=True)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  
1# This Source Code Form is subject to the terms of the Mozilla Public2# License, v. 2.0. If a copy of the MPL was not distributed with this3# file, You can obtain one at http://mozilla.org/MPL/2.0/.4import base645import hashlib6import imghdr7import struct8import urllib9from marionette_driver import By10from marionette_driver.errors import JavascriptException, NoSuchWindowException11from marionette_harness import (12    MarionetteTestCase,13    skip,14    skip_if_mobile,15    WindowManagerMixin,16)17def inline(doc, mime="text/html;charset=utf-8"):18    return "data:{0},{1}".format(mime, urllib.quote(doc))19box = inline("<body><div id='box'><p id='green' style='width: 50px; height: 50px; "20             "background: silver;'></p></div></body>")21input = inline("<body><input id='text-input'></input></body>")22long = inline("<body style='height: 300vh'><p style='margin-top: 100vh'>foo</p></body>")23short = inline("<body style='height: 10vh'></body>")24svg = inline("""25    <svg xmlns="http://www.w3.org/2000/svg" height="20" width="20">26      <rect height="20" width="20"/>27    </svg>""", mime="image/svg+xml")28class ScreenCaptureTestCase(MarionetteTestCase):29    def setUp(self):30        super(ScreenCaptureTestCase, self).setUp()31        self._device_pixel_ratio = None32    @property33    def device_pixel_ratio(self):34        if self._device_pixel_ratio is None:35            self._device_pixel_ratio = self.marionette.execute_script("""36                return window.devicePixelRatio37                """)38        return self._device_pixel_ratio39    @property40    def document_element(self):41        return self.marionette.find_element(By.CSS_SELECTOR, ":root")42    @property43    def page_y_offset(self):44        return self.marionette.execute_script("return window.pageYOffset")45    @property46    def viewport_dimensions(self):47        return self.marionette.execute_script("""48            return [arguments[0].clientWidth,49                    arguments[0].clientHeight];50            """, script_args=[self.document_element])51    def assert_png(self, screenshot):52        """Test that screenshot is a Base64 encoded PNG file."""53        image = base64.decodestring(screenshot)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)...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
