From e249d7ae9e8fd6685ccf31a4351446ab35924671 Mon Sep 17 00:00:00 2001 From: atthaboons Date: Sat, 18 Jul 2020 15:39:52 +0700 Subject: [PATCH 1/2] Add javascript keyword --- Examples/javascript-demo.robot | 23 +++++++++++++++++ PuppeteerLibrary/__init__.py | 5 +++- PuppeteerLibrary/keywords/__init__.py | 2 ++ PuppeteerLibrary/keywords/javascript.py | 25 +++++++++++++++++++ PuppeteerLibrary/keywords/javascript_async.py | 12 +++++++++ 5 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 Examples/javascript-demo.robot create mode 100644 PuppeteerLibrary/keywords/javascript.py create mode 100644 PuppeteerLibrary/keywords/javascript_async.py diff --git a/Examples/javascript-demo.robot b/Examples/javascript-demo.robot new file mode 100644 index 0000000..24332a4 --- /dev/null +++ b/Examples/javascript-demo.robot @@ -0,0 +1,23 @@ +*** Settings *** +Library PuppeteerLibrary +Test Setup Open browser to test page +Test Teardown Close Browser + + +*** Variables *** +${HOME_PAGE_URL} http://127.0.0.1:7272 + + +*** Test Cases *** +Execute javascript command + Handle Alert ACCEPT + Execute Javascript console.log('Hi five'); + Execute Javascript alert('Hello world'); + + +*** Keywords *** +Open browser to test page + ${HEADLESS} Get variable value ${HEADLESS} ${False} + &{options} = create dictionary headless=${HEADLESS} + Open browser ${HOME_PAGE_URL} options=${options} + diff --git a/PuppeteerLibrary/__init__.py b/PuppeteerLibrary/__init__.py index b358343..001f836 100644 --- a/PuppeteerLibrary/__init__.py +++ b/PuppeteerLibrary/__init__.py @@ -3,7 +3,6 @@ from robot.api import logger from pyppeteer.browser import Browser from robot.libraries.BuiltIn import BuiltIn - from PuppeteerLibrary.custom_elements.SPage import SPage from PuppeteerLibrary.base.robotlibcore import DynamicCore from PuppeteerLibrary.keywords import ( @@ -14,6 +13,8 @@ ElementKeywordsAsync, FormElementKeywords, FormElementKeywordsAsync, + JavascriptKeywords, + JavascriptKeywordsAsync, ScreenshotKeywords, ScreenshotKeywordsAsync, UtilityKeywords, @@ -77,6 +78,7 @@ def __init__(self): BrowserManagementKeywords(self), ElementKeywords(self), FormElementKeywords(self), + JavascriptKeywords(self), ScreenshotKeywords(self), UtilityKeywords(self), WaitingKeywords(self) @@ -87,6 +89,7 @@ def __init__(self): AlertKeywordsAsync(self), ElementKeywordsAsync(self), FormElementKeywordsAsync(self), + JavascriptKeywordsAsync(self), ScreenshotKeywordsAsync(self), WaitingKeywordsAsync(self) ] diff --git a/PuppeteerLibrary/keywords/__init__.py b/PuppeteerLibrary/keywords/__init__.py index cb90e6c..2c402e7 100644 --- a/PuppeteerLibrary/keywords/__init__.py +++ b/PuppeteerLibrary/keywords/__init__.py @@ -5,6 +5,8 @@ from .element_async import ElementKeywordsAsync from .formelement import FormElementKeywords from .formelement_async import FormElementKeywordsAsync +from .javascript import JavascriptKeywords +from .javascript_async import JavascriptKeywordsAsync from .screenshot import ScreenshotKeywords from .screenshot_async import ScreenshotKeywordsAsync from .utility import UtilityKeywords diff --git a/PuppeteerLibrary/keywords/javascript.py b/PuppeteerLibrary/keywords/javascript.py new file mode 100644 index 0000000..308c815 --- /dev/null +++ b/PuppeteerLibrary/keywords/javascript.py @@ -0,0 +1,25 @@ +from PuppeteerLibrary.base.robotlibcore import keyword +from PuppeteerLibrary.base.librarycomponent import LibraryComponent +from PuppeteerLibrary.keywords.javascript_async import JavascriptKeywordsAsync + + +class JavascriptKeywords(LibraryComponent): + + def __init__(self, ctx): + self.ctx = ctx + self.async_func = JavascriptKeywordsAsync(self.ctx) + + @keyword + def execute_javascript(self, code): + """Executes the given JavaScript code + + Examples: + | `Handle Alert` | ACCEPT | + | `Execute Javascript` | alert('Hello world'); | + + + Examples: + | `Execute Javascript` | console.log('Hi 5'); | + + """ + return self.loop.run_until_complete(self.async_func.execute_javascript_async(code)) diff --git a/PuppeteerLibrary/keywords/javascript_async.py b/PuppeteerLibrary/keywords/javascript_async.py new file mode 100644 index 0000000..c3b75c6 --- /dev/null +++ b/PuppeteerLibrary/keywords/javascript_async.py @@ -0,0 +1,12 @@ +from PuppeteerLibrary.base.robotlibcore import keyword +from PuppeteerLibrary.base.librarycomponent import LibraryComponent + + +class JavascriptKeywordsAsync(LibraryComponent): + + def __init__(self, ctx): + self.ctx = ctx + + @keyword + async def execute_javascript_async(self, code): + return await self.ctx.get_current_page().evaluate(code) From e5a017a57cc8950899ad6f2356591b970e254246 Mon Sep 17 00:00:00 2001 From: atthaboons Date: Sat, 18 Jul 2020 15:52:50 +0700 Subject: [PATCH 2/2] Update keywords doc --- docs/PuppeteerLibrary.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/PuppeteerLibrary.html b/docs/PuppeteerLibrary.html index a323ed2..504e321 100644 --- a/docs/PuppeteerLibrary.html +++ b/docs/PuppeteerLibrary.html @@ -547,7 +547,7 @@ jQuery.extend({highlight:function(e,t,n,r){if(e.nodeType===3){var i=e.data.match(t);if(i){var s=document.createElement(n||"span");s.className=r||"highlight";var o=e.splitText(i.index);o.splitText(i[0].length);var u=o.cloneNode(true);s.appendChild(u);o.parentNode.replaceChild(s,o);return 1}}else if(e.nodeType===1&&e.childNodes&&!/(script|style)/i.test(e.tagName)&&!(e.tagName===n.toUpperCase()&&e.className===r)){for(var a=0;a