Beispiel #1
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)
Beispiel #2
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
Beispiel #3
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()
Beispiel #4
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)