Пример #1
0
    async def test_open_jira_page(self):
        from osbot_aws.apis.Secrets import Secrets
        self.api = API_Browser(headless=False)

        login_needed = False
        self.secrets_id = 'GS_BOT_GS_JIRA'

        (server, username, password) = Secrets(
            self.secrets_id).value_from_json_string().values()

        if login_needed:
            Dev.pprint(server, username, password)
            await self.api.open(server + '/login.jsp')
            page = await self.api.page()
            await page.type('#login-form-username', username)
            await page.type('#login-form-password', password)
            await page.click('#login-form-submit')

        #await self.api.open(server + '/browse/GSP-95')
        #page = await self.api.page()
        #await self.api.js_execute("$('#show-more-links-link').click()")
        #from time import sleep
        #sleep(1)
        await self.api.page_size(2000, 3000)

        await self.api.screenshot(
            file_screenshot='/tmp/tmp-jira-screenshot.png', full_page=True)
Пример #2
0
 def __init__(self, web_page, headless=True):
     self.web_page = web_page
     self.title = 'browser view'
     self.web_root = Files.path_combine(Files.parent_folder(__file__),
                                        '../web_root')
     self.api_browser = API_Browser(headless=headless).sync__setup_browser()
     self.web_server = Web_Server(self.web_root)
     self.render_page = Render_Page(api_browser=self.api_browser,
                                    web_server=self.web_server)
Пример #3
0
class test_API_Browser(TestCase):
    def setUp(self):
        self.api = API_Browser(headless=False)

    #@unittest.skip("bug: needs to load markdow page first")
    @sync
    async def test_js_eval(self):
        text = "some_text"
        text_base64 = base64.b64encode(text.encode()).decode()
        assert await self.api.js_eval("btoa('{0}')".format(text)
                                      ) == text_base64
        assert await self.api.js_eval("atob('{0}')".format(text_base64)
                                      ) == text

    @sync
    async def test_html(self):
        await self.api.open('https://www.google.com')
        html = await self.api.html()
        assert len(html) > 100

    @sync
    async def test_open(self):
        (headers, status, url,
         browser) = await self.api.open('https://www.google.com')
        assert headers['x-frame-options'] == 'SAMEORIGIN'
        assert status == 200
        assert url == 'https://www.google.com/'

    @sync
    async def test_page(self):
        url = 'https://www.google.com/404'
        await self.api.open(url)
        page = await self.api.page()
        assert page.url == url

    @sync
    async def test_screenshot(self):
        await self.api.open('https://news.bbc.co.uk')
        file_jpg = await self.api.screenshot()
        assert Files.exists(file_jpg)
        #exec_open(file_jpg)

    @sync
    @pytest.mark.skip("needs to run in Headless mode")
    async def test_pdf(self):
        # note: only works when headless = True . See https://github.com/puppeteer/puppeteer/issues/1829#issuecomment-657930419
        await self.api.open('https://news.bbc.co.uk')
        file_pdf = await self.api.pdf()
        assert Files.exists(file_pdf)
        exec_open(file_pdf)

    def test_open_settings(self):
        page = 'chrome://settings/help'
        self.api.sync__open(page)
Пример #4
0
class Temp_Browser:
    api_browser: API_Browser
    browser: Chrome

    def __init__(self, headless=True, auto_close=True, open_page=None):
        self.headless = headless
        self.auto_close = auto_close
        self.open_page = open_page
        self.temp_screenshot_file = '/tmp/temp_browser_screenshot.png'

    def __enter__(self):
        self.api_browser = API_Browser(headless=self.headless)
        self.browser = self.api_browser.sync__browser()
        if self.open_page:
            self.api_browser.sync__open(self.open_page)
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        if self.auto_close is True:
            self.api_browser.sync__close_browser(
            )  # todo see if this really only continues when the process process has terminated

    def links(self):
        return self.py_query().query('a').indexed_by_attribute(
            'href', return_unique_list=True)

    def screenshot(self, save_to=None):
        if save_to is None:
            save_to = self.temp_screenshot_file
        return self.api_browser.sync__screenshot(file_screenshot=save_to)

    def html(self):
        return self.api_browser.sync__html_raw()

    def open(self, url):
        return self.api_browser.sync__open(url)

    def open_google(self):
        return self.open('https://www.google.com')

    def page(self):
        return self.api_browser.sync__page()

    def url(self):
        return self.api_browser.sync__url()

    def py_query(self):
        return Py_Query(self.html())

    def set_auto_close(self, value):
        self.auto_close = value
Пример #5
0
def run(event, context=None):
    load_dependencies('syncer,requests,pyppeteer2,websocket-client')
    from osbot_browser.browser.API_Browser import API_Browser

    url = event.get('url')
    #return url
    # error in this line:  Read-only file system: '/home/sbx_user1051
    api_browser = API_Browser().sync__setup_browser()
    # we don't get here

    if url:
        api_browser.sync__open(url)

    return api_browser.sync__screenshot_base64()
Пример #6
0
class test_workflows_API_Browser(TestCase):
    def setUp(self):
        self.api = API_Browser(headless=False)
        self.png_file = '/tmp/tmp-jira-screenshot.png'

    def test_open_jira_slack(self):
        #url = 'https://os-summit.slack.com/messages/DJ8UA0RFT/'
        url = 'https://os-summit.slack.com/messages/CK475UCJY/'
        self.api.sync__open(url)
        email = '*****@*****.**'
        password = "******"
        js_code = """$('#email').val('{0}')
                     $('#password').val('{1}')
                     $('#signin_btn').click()
                  """.format(email, password)

        self.api.sync__js_execute(js_code)

        #await self.api.screenshot(file_screenshot=self.png_file)

    @sync
    async def test_open_jira_page(self):
        from osbot_aws.apis.Secrets import Secrets
        self.api = API_Browser(headless=False)

        login_needed = False
        self.secrets_id = 'GS_BOT_GS_JIRA'

        (server, username, password) = Secrets(
            self.secrets_id).value_from_json_string().values()

        if login_needed:
            Dev.pprint(server, username, password)
            await self.api.open(server + '/login.jsp')
            page = await self.api.page()
            await page.type('#login-form-username', username)
            await page.type('#login-form-password', password)
            await page.click('#login-form-submit')

        #await self.api.open(server + '/browse/GSP-95')
        #page = await self.api.page()
        #await self.api.js_execute("$('#show-more-links-link').click()")
        #from time import sleep
        #sleep(1)
        await self.api.page_size(2000, 3000)

        await self.api.screenshot(
            file_screenshot='/tmp/tmp-jira-screenshot.png', full_page=True)
Пример #7
0
 def __init__(self, headless=True):
     self.web_page = '/vivagraph/simple.html'
     self.web_root = Files.path_combine(Files.parent_folder(__file__),
                                        '../web_root')
     self.api_browser = API_Browser(headless=headless).sync__setup_browser()
     self.web_server = Web_Server(self.web_root)
     self.render_page = Render_Page(api_browser=self.api_browser,
                                    web_server=self.web_server)
Пример #8
0
 def setup(self):
     login_details   = json.loads(Secrets(self.aws_secrets_id).value())
     self.username   = login_details.get('username')
     self.password   = login_details.get('password')
     self.server_url = login_details.get('server_url')
     if self._browser is None:
         self._browser = API_Browser(headless=self.headless).sync__setup_browser()
     return self._browser
Пример #9
0
 def setup(self):
     self.load_browser_dependencies()
     from osbot_browser.browser.API_Browser import API_Browser
     from osbot_browser.browser.Render_Page import Render_Page
     self.api_browser = API_Browser(
         headless=self.headless).sync__setup_browser()
     self.render_page = Render_Page(api_browser=self.api_browser,
                                    web_root=self.web_root())
     return self
Пример #10
0
 def __init__(self, headless=True):
     self.web_page = '/vivagraph/simple.html'
     self.jira_icons = '/vivagraph/icons'
     self.web_root = path_combine(Files.parent_folder(__file__),
                                  '../web_root')
     self.api_browser = API_Browser(headless=headless).sync__setup_browser()
     self.browser_width = None
     self.render_wait = None
     self.web_server = None  # Web_Server(self.web_root)
Пример #11
0
 def __init__(self,
              target_server,
              headless=True,
              api_browser=None,
              path_screenshot=None,
              user_agent=None):
     self.api_browser = api_browser or API_Browser(headless=headless)
     self.user_agent = user_agent or 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'
     self.path_screenshot = path_screenshot
     self.target_server = target_server
Пример #12
0
 def __init__(self):
     self.web_page = '/datatables/simple.html'
     self.web_root = Files.path_combine(Files.parent_folder(__file__),
                                        '../web_root')
     self.api_browser = API_Browser().sync__setup_browser()
     self.render_page = Render_Page(api_browser=self.api_browser,
                                    web_root=self.web_root)
     self.table_width = '100%'
     self.columns_defs = None
     self.table_title = None
Пример #13
0
 def __init__(self, headless=True):
     self.web_page = '/gs/risk/risks-dashboard.html'
     self.web_root = Files.path_combine(Files.parent_folder(__file__),
                                        '../web_root')
     self.headless = headless
     self.api_browser = API_Browser(self.headless,
                                    self.headless).sync__setup_browser()
     self.render_page = Render_Page(api_browser=self.api_browser,
                                    web_root=self.web_root)
     self.graph_name = None
     self.jira_key = None
Пример #14
0
    def __init__(self, headless=True):
        self.web_page = '/vis-js/simple.html'
        self.web_root = Files.path_combine(Files.parent_folder(__file__),
                                           '../web_root')
        chrome = Chrome().headless(headless)

        self.api_browser = API_Browser(chrome.sync().browser())
        self.render_page = Render_Page(api_browser=self.api_browser,
                                       web_root=self.web_root)
        self.bot_name = 'GS_Bot'
        self.options = None
Пример #15
0
 def __init__(self,
              api_browser=None,
              headless=True,
              web_root=None,
              web_server=None):
     if web_server:
         self.web_server = web_server
     else:
         self.web_server = Web_Server(web_root)
     if api_browser:
         self.api_browser = api_browser
     else:
         self.api_browser = API_Browser(headless=headless)
Пример #16
0
    def setup(self):

        if os.getenv('AWS_REGION'):
            load_dependency('syncer')
            load_dependency('requests')
            #self.setup_AWS()
        # else:
        #     self.setup_local()

        from osbot_browser.browser.API_Browser import API_Browser
        from osbot_browser.browser.Render_Page import Render_Page
        self.api_browser = API_Browser(headless=self.headless).sync__setup_browser()
        self.render_page = Render_Page(api_browser=self.api_browser, web_root=self.web_root())

        return self
Пример #17
0
 def setUp(self):
     self.api = API_Browser(headless=True)
Пример #18
0
 def __init__(self):
     self.browser = API_Browser()
Пример #19
0
 def __enter__(self):
     self.api_browser = API_Browser(headless=self.headless)
     self.browser = self.api_browser.sync__browser()
     if self.open_page:
         self.api_browser.sync__open(self.open_page)
     return self
Пример #20
0
 def setUp(self):
     self.api = API_Browser(headless=False)
Пример #21
0
class Base_View_Helpers:
    def __init__(self, web_page, headless=True):
        self.web_page = web_page
        self.title = 'browser view'
        self.web_root = Files.path_combine(Files.parent_folder(__file__),
                                           '../web_root')
        self.api_browser = API_Browser(headless=headless).sync__setup_browser()
        self.web_server = Web_Server(self.web_root)
        self.render_page = Render_Page(api_browser=self.api_browser,
                                       web_server=self.web_server)

    # common methods (move to base class)
    def browser(self):
        return self.api_browser

    def browser_width(self, value, height=None):
        self.browser().sync__browser_width(value, height)
        return self

    def load_page(self, reload=False):
        if reload or self.web_page not in self.browser().sync__url():
            self.render_page.open_file_in_browser(self.web_page)
        return self

    def create_dashboard_screenshot(self, clip=None):
        #clip = {'x': 1, 'y': 1, 'width': 945, 'height': 465}
        #clip = None
        return self.browser().sync__screenshot(clip=clip)

    def send_screenshot_to_slack(self, team_id=None, channel=None, clip=None):
        png_file = self.create_dashboard_screenshot(clip)
        return Browser_Lamdba_Helper().send_png_file_to_slack(
            team_id, channel, self.title, png_file)

    def get_graph_data(self, graph_name):
        params = {'params': ['raw_data', graph_name, 'details'], 'data': {}}
        data = Lambda('lambdas.gsbot.gsbot_graph').invoke(params)
        if type(data) is str:
            s3_key = data
            s3_bucket = 'gs-lambda-tests'
            tmp_file = S3().file_download_and_delete(s3_bucket, s3_key)
            data = Json.load_json_and_delete(tmp_file)
            return data
        return data

    def exec_js(self, js_code):
        return self.browser().sync__js_execute(js_code)

    def invoke_js(self, name, params):
        return self.browser().sync_js_invoke_function(name, params)

    def assign_variable_js(self, variable, data):
        return self.browser().sync_js_assign_variable(variable, data)

    def set_browser_width_based_on_nodes(self, nodes):
        if len(nodes) < 30: self.browser().sync__browser_width(800)
        elif len(nodes) < 100: self.browser().sync__browser_width(1500)
        elif len(nodes) < 200: self.browser().sync__browser_width(2000)
        else: self.browser().sync__browser_width(3000)

    def render(self,
               nodes,
               edges,
               js_code=None,
               options=None,
               team_id=None,
               channel=None,
               sleep_for=None,
               width=None):
        if len(nodes) > 0:

            if width:
                self.browser().sync__browser_width(width)
            else:
                self.set_browser_width_based_on_nodes(nodes)
                # if          len(nodes) < 50 :                                            sleep_for = 2
                # elif  50 <  len(nodes) < 100: self.browser().sync__browser_width(1000) ; sleep_for = 3
                # elif 100 <  len(nodes) < 200: self.browser().sync__browser_width(2000) ; sleep_for = 5
                # elif        len(nodes) > 200: self.browser().sync__browser_width(3000) ; sleep_for = 10

            self.create_graph(nodes, edges, options)
            self.api_browser.sync__js_execute(js_code)

            if sleep_for: sleep(sleep_for)

            return self.send_screenshot_to_slack(team_id, channel)
Пример #22
0
class test_API_Browser(TestCase):
    def setUp(self):
        self.api = API_Browser(headless=False)

    @sync
    async def test_browser_connect(self):
        browser = await self.api.browser_connect()
        assert WS_is_open(browser.wsEndpoint)

    def test_get_set_last_chrome_session(self):
        self.api.file_tmp_last_chrome_session = Files.temp_file()
        data = {
            'chrome_devtools':
            'ws://127.0.0.1:64979/devtools/browser/75fbaab9-33eb-41ee-afd9-4aed65166791'
        }
        self.api.set_last_chrome_session(data)
        assert self.api.get_last_chrome_session() == data
        Files.delete(self.api.file_tmp_last_chrome_session)

    @unittest.skip("bug: needs to load markdow page first")
    @sync
    async def test_js_eval(self):
        markdown = """
# some title "with double quotes"
some text  and 'single quotes'
"""
        encoded_text = base64.b64encode(markdown.encode()).decode()
        js_script = "convert(atob('{0}'))".format(encoded_text)

        result = await self.api.js_eval(js_script)
        #Dev.pprint(result)

    @unittest.skip("bug: needs to load markdow page first")
    @sync
    async def test_invoke_js_function(self):
        markdown = """
# changed title "via js function"
some text  and 'single quotes'
"""
        result = await self.api.js_invoke_function('convert', markdown)
        #Dev.pprint(result)

    @sync
    async def test_html(self):
        await self.api.open('https://www.google.com')
        content = await self.api.html()
        assert len(content.html()) > 100

    @sync
    async def test_open(self):
        (headers, status, url,
         browser) = await self.api.open('https://www.google.com')
        assert headers['x-frame-options'] == 'SAMEORIGIN'
        assert status == 200
        assert url == 'https://www.google.com/'

    @sync
    async def test_page(self):
        page = await self.api.page()
        assert "http" in page.url

    @sync
    async def test_screenshot(self):
        await self.api.open('https://news.bbc.co.uk')
        file = await self.api.screenshot()
        assert Files.exists(file)
Пример #23
0
 def api_browser(
     self
 ):  # todo: figure out if this is the best way to expose this object
     from osbot_browser.browser.API_Browser import API_Browser
     return API_Browser(self.browser())
Пример #24
0
 def setUp(self):
     self.api = API_Browser(headless=False)
     self.png_file = '/tmp/tmp-jira-screenshot.png'