diff --git a/404.html b/404.html index e19dd130..90c08e6a 100644 --- a/404.html +++ b/404.html @@ -5,7 +5,7 @@ Page Not Found | ROBOT FRAMEWORK - + diff --git a/assets/images/studio-3a7537cbd33cbe2fb25482eb956558eb.gif b/assets/images/studio-3a7537cbd33cbe2fb25482eb956558eb.gif deleted file mode 100644 index f027329d..00000000 Binary files a/assets/images/studio-3a7537cbd33cbe2fb25482eb956558eb.gif and /dev/null differ diff --git a/assets/images/vscode-code-9913ca5f838be8e32b7deb1e5b18de37.gif b/assets/images/vscode-code-9913ca5f838be8e32b7deb1e5b18de37.gif deleted file mode 100644 index 19cc6547..00000000 Binary files a/assets/images/vscode-code-9913ca5f838be8e32b7deb1e5b18de37.gif and /dev/null differ diff --git a/assets/images/vscode-lsp-dedf84c9aa85a3447e28310d4839c15e.gif b/assets/images/vscode-lsp-dedf84c9aa85a3447e28310d4839c15e.gif deleted file mode 100644 index 24d340a7..00000000 Binary files a/assets/images/vscode-lsp-dedf84c9aa85a3447e28310d4839c15e.gif and /dev/null differ diff --git a/assets/js/a6354d69.798add9e.js b/assets/js/a6354d69.798add9e.js deleted file mode 100644 index 7c2484f1..00000000 --- a/assets/js/a6354d69.798add9e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4017],{7301:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>u});var r=o(4848),n=o(8453),s=o(1470),i=o(9365);const a={sidebar_position:2,sidebar_label:"I'm looking for RPA",title:"I'm looking for RPA",description:"Use rcc to create a new RPA project"},l=void 0,c={id:"getting_started/rpa",title:"I'm looking for RPA",description:"Use rcc to create a new RPA project",source:"@site/docs/getting_started/rpa.md",sourceDirName:"getting_started",slug:"/getting_started/rpa",permalink:"/docs/getting_started/rpa",draft:!1,unlisted:!1,editUrl:"https://github.com/MarketSquare/robotframeworkguides/edit/main/website/docs/getting_started/rpa.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,sidebar_label:"I'm looking for RPA",title:"I'm looking for RPA",description:"Use rcc to create a new RPA project"},sidebar:"tutorialSidebar",previous:{title:"I'm looking for testing",permalink:"/docs/getting_started/testing"},next:{title:"Set up your IDE",permalink:"/docs/getting_started/ide"}},d={},u=[{value:"Run your first robot",id:"run-your-first-robot",level:2},{value:"What is this RCC?",id:"what-is-this-rcc",level:2},{value:"Editors and IDEs",id:"editors-and-ides",level:2},{value:"Automation Studio",id:"automation-studio",level:3},{value:"Visual Studio Code",id:"visual-studio-code",level:3},{value:"RCC extension for VS Code",id:"rcc-extension-for-vs-code",level:3},{value:"Robot Framework LSP extensions for VS Code",id:"robot-framework-lsp-extensions-for-vs-code",level:3},{value:"About Robotic Process Automation (RPA)",id:"about-robotic-process-automation-rpa",level:2},{value:"RPA resources to get started",id:"rpa-resources-to-get-started",level:2}];function h(e){const t={a:"a",blockquote:"blockquote",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,n.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(t.p,{children:["\ud83d\ude80"," ",(0,r.jsx)(t.strong,{children:"Welcome!"})," ",(0,r.jsx)("br",{}),"\r\nYou can find more explanations and guidance down below, but first, let's get you running a bot :runner:"]}),"\n",(0,r.jsx)(t.h2,{id:"run-your-first-robot",children:"Run your first robot"}),"\n",(0,r.jsxs)(t.p,{children:["The scripts below enable you to get a robot setup and running from a selection of templates using a CLI tool called ",(0,r.jsx)(t.a,{href:"https://github.com/robocorp/rcc#readme",children:"RCC"})]}),"\n",(0,r.jsxs)(s.A,{children:[(0,r.jsx)(i.A,{value:"Windows",label:"Windows",default:!0,children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{children:"curl -o rcc.exe https://downloads.robocorp.com/rcc/releases/latest/windows64/rcc.exe\r\nrcc create example\r\ncd example\r\n..\\rcc run\n"})})}),(0,r.jsx)(i.A,{value:"MacOS",label:"MacOS",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{children:"brew install robocorp/tools/rcc\r\nrcc create example\r\ncd example\r\n../rcc run\n"})})}),(0,r.jsx)(i.A,{value:"Linux",label:"Linux",children:(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{children:"curl -o rcc https://downloads.robocorp.com/rcc/releases/latest/linux64/rcc\r\nchmod a+x rcc\r\nrcc create example\r\ncd example\r\n../rcc run\n"})})})]}),"\n",(0,r.jsxs)(t.p,{children:["The first run sets up the environment, so it takes a bit longer, but if you do the ",(0,r.jsx)(t.code,{children:"rcc run"})," a second time, you'll see the power of RCC."]}),"\n",(0,r.jsxs)(t.p,{children:["\ud83d\ude80"," With your bot running, you can now look deeper into what you just did and then jump on to editors to get cracking."]}),"\n",(0,r.jsx)(t.h2,{id:"what-is-this-rcc",children:"What is this RCC?"}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.a,{href:"https://github.com/robocorp/rcc#readme",children:"RCC"})," is an open-source tool that handles everything essential around an RPA robot run on Windows, macOS, and Linux. With RCC, the machine running the robot does not even need Python installed."]}),"\n",(0,r.jsxs)(t.p,{children:["So, if you look back into ",(0,r.jsx)(t.a,{href:"/docs/getting_started/rpa#run-your-first-robot",children:"the first robot you ran"}),", you will see the following:"]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["The environment your bot needs is defined in: ",(0,r.jsx)(t.a,{href:"https://github.com/robocorp/rcc/blob/master/docs/recipes.md#what-is-in-condayaml",children:"conda.yaml"})]}),"\n",(0,r.jsxs)(t.li,{children:["How your robot is executed is defined in: ",(0,r.jsx)(t.a,{href:"https://github.com/robocorp/rcc/blob/master/docs/recipes.md#what-is-in-robotyaml",children:"robot.yaml"})]}),"\n",(0,r.jsxs)(t.li,{children:["The logic of your bot is in Robot Framework (",(0,r.jsx)(t.code,{children:".robot"}),") or Python (",(0,r.jsx)(t.code,{children:".py"}),") -files... or both."]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["With the above files ",(0,r.jsx)(t.a,{href:"https://github.com/robocorp/rcc#readme",children:"RCC"})," can set up an isolated environment and ensure your bot runs the same way every time.",(0,r.jsx)("br",{}),"\r\n","\ud83d\udc49",' Get rid of: "Works on my machine".']}),"\n",(0,r.jsxs)(t.blockquote,{children:["\n",(0,r.jsxs)(t.p,{children:["RCC has a lot of cool tricks, so once you've gotten started, it is worth ",(0,r.jsx)(t.a,{href:"https://github.com/robocorp/rcc/tree/master/docs#readme",children:"check out some more"})]}),"\n"]}),"\n",(0,r.jsxs)(t.p,{children:["\ud83d\ude80"," So now you have your bot running and have a slight idea how you got there; what next?",(0,r.jsx)("br",{}),"\r\nYou need to see and edit your bot code to get it doing what you need, so head-on to the ",(0,r.jsx)(t.a,{href:"/docs/getting_started/rpa#editors-and-ides",children:"Editor and IDEs"})]}),"\n",(0,r.jsx)(t.h2,{id:"editors-and-ides",children:"Editors and IDEs"}),"\n",(0,r.jsx)(t.p,{children:"There is no shortage of editors for Robot Framework and Python, but for RPA work, we limit the list to get you started. In the end, what you create is just Robot Framework and Python code, so you are not limited to the tools mentioned here."}),"\n",(0,r.jsx)(t.h3,{id:"automation-studio",children:"Automation Studio"}),"\n",(0,r.jsxs)(t.p,{children:["If you are unfamiliar with coding and tools like VS Code, we'd recommend starting with a tool like ",(0,r.jsx)(t.a,{href:"https://robocorp.com/automation-studio",children:"Automation Studio"}),"."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{src:o(6126).A+"",width:"1303",height:"757"})}),"\n",(0,r.jsx)(t.p,{children:"This kind of IDE enables you to start without worrying about syntax, environments, etc., right from the bat. You can still get quite far, and the tool allows you to see and edit on the code level. Automation Studio is also creating a robot just like the first RCC bot, so you can jump to other tools if you feel limited."}),"\n",(0,r.jsxs)(t.blockquote,{children:["\n",(0,r.jsxs)(t.p,{children:["For the test automation people:",(0,r.jsx)("br",{}),"\r\nNote that there is very little RPA specific about Automation Studio as it is just generating Robot Framework code.",(0,r.jsx)("br",{}),"\r\nEven hard-boiled coders like to do things easy once in a while ","\ud83d\ude09"]}),"\n"]}),"\n",(0,r.jsx)(t.h3,{id:"visual-studio-code",children:"Visual Studio Code"}),"\n",(0,r.jsxs)(t.p,{children:["If you are using ",(0,r.jsx)(t.a,{href:"https://code.visualstudio.com",children:"VS Code"})," or are looking for the complete feature set of developer tools, then the extensions are for you."]}),"\n",(0,r.jsxs)(t.p,{children:["\ud83d\udc49"," ",(0,r.jsx)(t.a,{href:"https://code.visualstudio.com",children:"Get VS Code here"})]}),"\n",(0,r.jsx)(t.p,{children:"To get going with RPA development, you need two extensions: The extension for LSP and the RCC extension."}),"\n",(0,r.jsx)(t.h3,{id:"rcc-extension-for-vs-code",children:"RCC extension for VS Code"}),"\n",(0,r.jsx)(t.p,{children:"This extension brings in the RCC functionality with command palette commands and a nice sidebar."}),"\n",(0,r.jsxs)(t.p,{children:["\ud83d\udc49"," ",(0,r.jsx)(t.a,{href:"https://marketplace.visualstudio.com/items?itemName=robocorp.robocorp-code",children:"Get Robocorp Code here"})]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{src:o(8012).A+"",width:"1270",height:"757"})}),"\n",(0,r.jsx)(t.h3,{id:"robot-framework-lsp-extensions-for-vs-code",children:"Robot Framework LSP extensions for VS Code"}),"\n",(0,r.jsxs)(t.p,{children:["Language Server Protocol extensions bring in code completion, documentation, highlighting, etc., for your Robot Framework code.\r\nThere are options here, but ",(0,r.jsx)(t.strong,{children:"remember only to install one"})," as multiple LSP handlers will cause problems:"]}),"\n",(0,r.jsxs)(s.A,{children:[(0,r.jsxs)(i.A,{value:"LSP",label:"Robot Framework Language Server",default:!0,children:[(0,r.jsxs)(t.p,{children:["\ud83d\udc49"," ",(0,r.jsx)(t.a,{href:"https://marketplace.visualstudio.com/items?itemName=robocorp.robotframework-lsp",children:"Get Robot Framework LSP here"})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{src:o(1736).A+"",width:"1270",height:"757"})})]}),(0,r.jsxs)(i.A,{value:"RobotCode",label:"Robot Code",children:[(0,r.jsxs)(t.p,{children:["\ud83d\udc49"," ",(0,r.jsx)(t.a,{href:"https://marketplace.visualstudio.com/items?itemName=d-biehl.robotcode",children:"Get Robot Code here"})]}),(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{src:o(5326).A+"",width:"1920",height:"1080"})})]})]}),"\n",(0,r.jsx)(t.h2,{id:"about-robotic-process-automation-rpa",children:"About Robotic Process Automation (RPA)"}),"\n",(0,r.jsx)(t.p,{children:'Robotic Process Automation (RPA) is similar to test automation on the technical level, but the mentality is different on the business and results side. In RPA, it is pretty standard that you are not running on a machine you control entirely, so your robot needs to be "self-sufficient" and isolated. Also, instead of finding and documenting places where robot execution fails or succeeds, the aim is always to succeed and get the result of the process.'}),"\n",(0,r.jsx)(t.p,{children:"Isolation and repeatability are the other vital points in RPA. The bot needs to execute with minimal setup by IT people, and where governance is a thing, locking down your dependencies is a must-have feature.\r\nWith RCC environment caching and wrapping features, you can lock down your dependencies to the actual unique files. In RPA, you do not want loose dependency handling breaking your production bots."}),"\n",(0,r.jsxs)(t.blockquote,{children:["\n",(0,r.jsxs)(t.p,{children:["Remember ",(0,r.jsx)(t.code,{children:"pip install numpy"})," does ",(0,r.jsx)(t.strong,{children:"not"})," mean you will get the latest version;",(0,r.jsx)("br",{}),"\r\nit means you are OK with getting whatever version you get ","\ud83d\ude09"]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"All this validates a separate getting started brief and a difference in tooling. The actual logic of calling out APIs and interacting with browsers and applications is still the same as in test automation."}),"\n",(0,r.jsxs)(t.p,{children:["\ud83d\ude80"," So by this point, you should have run your first bot, have an editor / IDE up-n-and running, and have an idea of the slight differences between RPA and test automation using Robot Framework.\r\nYou are raring to go, so go ahead and check out the resources and libraries -part."]}),"\n",(0,r.jsx)(t.h2,{id:"rpa-resources-to-get-started",children:"RPA resources to get started"}),"\n",(0,r.jsx)(t.p,{children:"For the resources and libraries part you can check out the following pages:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"/docs/different_libraries/rpa",children:"RPA libraries"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"/docs/different_libraries/how_to_find_library",children:"How to find the right library"})}),"\n",(0,r.jsxs)(t.li,{children:["Sources for RPA example in Robot Framework:","\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"https://robocorp.com/portal/",children:"Robocorp Portal"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"The main point to remember is that with Robot Framework and Python, there are just about no limits to what you can do. There are a ton of libraries out there, but you can also make your own."}),"\n",(0,r.jsx)(t.p,{children:"We always recommend giving back to the open-source community, as you usually get more back than you put in."}),"\n",(0,r.jsx)(t.p,{children:"For example:\r\nIt is quite rare that the business value of an RPA process is in the library that interacts with an application or an API, so why not publish the connectivity part as open-source and get others to chip in on the maintenance and improvements? This way, you can focus more on the actual RPA problem."}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"/docs/extending_robot_framework/custom-libraries/releasing_your_own_libraries",children:"Releasing your own library"})}),"\n",(0,r.jsx)(t.li,{children:(0,r.jsx)(t.a,{href:"/docs/about/contribute",children:"Help out with this documentation"})}),"\n",(0,r.jsx)(t.li,{children:"Create example bots into the public repository and ping in the forums and Slacks"}),"\n"]})]})}function p(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},9365:(e,t,o)=>{o.d(t,{A:()=>i});o(6540);var r=o(8215);const n={tabItem:"tabItem_Ymn6"};var s=o(4848);function i(e){let{children:t,hidden:o,className:i}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,r.A)(n.tabItem,i),hidden:o,children:t})}},1470:(e,t,o)=>{o.d(t,{A:()=>w});var r=o(6540),n=o(8215),s=o(3104),i=o(6347),a=o(205),l=o(7485),c=o(1682),d=o(679);function u(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:o}=e;return(0,r.useMemo)((()=>{const e=t??function(e){return u(e).map((e=>{let{props:{value:t,label:o,attributes:r,default:n}}=e;return{value:t,label:o,attributes:r,default:n}}))}(o);return function(e){const t=(0,c.X)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,o])}function p(e){let{value:t,tabValues:o}=e;return o.some((e=>e.value===t))}function b(e){let{queryString:t=!1,groupId:o}=e;const n=(0,i.W6)(),s=function(e){let{queryString:t=!1,groupId:o}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!o)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return o??null}({queryString:t,groupId:o});return[(0,l.aZ)(s),(0,r.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(n.location.search);t.set(s,e),n.replace({...n.location,search:t.toString()})}),[s,n])]}function m(e){const{defaultValue:t,queryString:o=!1,groupId:n}=e,s=h(e),[i,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:o}=e;if(0===o.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:o}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${o.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=o.find((e=>e.default))??o[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[c,u]=b({queryString:o,groupId:n}),[m,f]=function(e){let{groupId:t}=e;const o=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,s]=(0,d.Dv)(o);return[n,(0,r.useCallback)((e=>{o&&s.set(e)}),[o,s])]}({groupId:n}),g=(()=>{const e=c??m;return p({value:e,tabValues:s})?e:null})();(0,a.A)((()=>{g&&l(g)}),[g]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!p({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),f(e)}),[u,f,s]),tabValues:s}}var f=o(2303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var x=o(4848);function j(e){let{className:t,block:o,selectedValue:r,selectValue:i,tabValues:a}=e;const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.a_)(),d=e=>{const t=e.currentTarget,o=l.indexOf(t),n=a[o].value;n!==r&&(c(t),i(n))},u=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const o=l.indexOf(e.currentTarget)+1;t=l[o]??l[0];break}case"ArrowLeft":{const o=l.indexOf(e.currentTarget)-1;t=l[o]??l[l.length-1];break}}t?.focus()};return(0,x.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.A)("tabs",{"tabs--block":o},t),children:a.map((e=>{let{value:t,label:o,attributes:s}=e;return(0,x.jsx)("li",{role:"tab",tabIndex:r===t?0:-1,"aria-selected":r===t,ref:e=>l.push(e),onKeyDown:u,onClick:d,...s,className:(0,n.A)("tabs__item",g.tabItem,s?.className,{"tabs__item--active":r===t}),children:o??t},t)}))})}function y(e){let{lazy:t,children:o,selectedValue:n}=e;const s=(Array.isArray(o)?o:[o]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return(0,x.jsx)("div",{className:"margin-top--md",children:s.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n})))})}function v(e){const t=m(e);return(0,x.jsxs)("div",{className:(0,n.A)("tabs-container",g.tabList),children:[(0,x.jsx)(j,{...t,...e}),(0,x.jsx)(y,{...t,...e})]})}function w(e){const t=(0,f.A)();return(0,x.jsx)(v,{...e,children:u(e.children)},String(t))}},6126:(e,t,o)=>{o.d(t,{A:()=>r});const r=o.p+"assets/images/studio-3a7537cbd33cbe2fb25482eb956558eb.gif"},8012:(e,t,o)=>{o.d(t,{A:()=>r});const r=o.p+"assets/images/vscode-code-9913ca5f838be8e32b7deb1e5b18de37.gif"},1736:(e,t,o)=>{o.d(t,{A:()=>r});const r=o.p+"assets/images/vscode-lsp-dedf84c9aa85a3447e28310d4839c15e.gif"},5326:(e,t,o)=>{o.d(t,{A:()=>r});const r=o.p+"assets/images/vscode-robotcode-1cbfb2c2349e975b197b73fa300019a4.gif"},8453:(e,t,o)=>{o.d(t,{R:()=>i,x:()=>a});var r=o(6540);const n={},s=r.createContext(n);function i(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a6354d69.f31fe8cd.js b/assets/js/a6354d69.f31fe8cd.js new file mode 100644 index 00000000..3fdf407a --- /dev/null +++ b/assets/js/a6354d69.f31fe8cd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4017],{7301:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>p,frontMatter:()=>s,metadata:()=>u,toc:()=>d});var n=o(4848),r=o(8453),a=o(1470),i=o(9365);const s={sidebar_position:2,sidebar_label:"I'm looking for RPA",title:"I'm looking for RPA",description:"Use rcc to create a new RPA project"},l=void 0,u={id:"getting_started/rpa",title:"I'm looking for RPA",description:"Use rcc to create a new RPA project",source:"@site/docs/getting_started/rpa.md",sourceDirName:"getting_started",slug:"/getting_started/rpa",permalink:"/docs/getting_started/rpa",draft:!1,unlisted:!1,editUrl:"https://github.com/MarketSquare/robotframeworkguides/edit/main/website/docs/getting_started/rpa.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,sidebar_label:"I'm looking for RPA",title:"I'm looking for RPA",description:"Use rcc to create a new RPA project"},sidebar:"tutorialSidebar",previous:{title:"I'm looking for testing",permalink:"/docs/getting_started/testing"},next:{title:"Set up your IDE",permalink:"/docs/getting_started/ide"}},c={},d=[{value:"About Robotic Process Automation (RPA)",id:"about-robotic-process-automation-rpa",level:2},{value:"RPA resources to get started",id:"rpa-resources-to-get-started",level:2},{value:"Editors and IDEs",id:"editors-and-ides",level:2},{value:"Visual Studio Code",id:"visual-studio-code",level:3},{value:"Robot Framework LSP extensions for VS Code",id:"robot-framework-lsp-extensions-for-vs-code",level:3}];function h(e){const t={a:"a",blockquote:"blockquote",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"about-robotic-process-automation-rpa",children:"About Robotic Process Automation (RPA)"}),"\n",(0,n.jsx)(t.p,{children:'Robotic Process Automation (RPA) is similar to test automation on the technical level, but the mentality is different on the business and results side. In RPA, it is pretty standard that you are not running on a machine you control entirely, so your robot needs to be "self-sufficient" and isolated. Also, instead of finding and documenting places where robot execution fails or succeeds, the aim is always to succeed and get the result of the process.'}),"\n",(0,n.jsx)(t.p,{children:"Isolation and repeatability are the other vital points in RPA. The bot needs to execute with minimal setup by IT people, and where governance is a thing, locking down your dependencies is a must-have feature.\r\nWith RCC environment caching and wrapping features, you can lock down your dependencies to the actual unique files. In RPA, you do not want loose dependency handling breaking your production bots."}),"\n",(0,n.jsxs)(t.blockquote,{children:["\n",(0,n.jsxs)(t.p,{children:["Remember ",(0,n.jsx)(t.code,{children:"pip install numpy"})," does ",(0,n.jsx)(t.strong,{children:"not"})," mean you will get the latest version;",(0,n.jsx)("br",{}),"\r\nit means you are OK with getting whatever version you get ","\ud83d\ude09"]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"All this validates a separate getting started brief and a difference in tooling. The actual logic of calling out APIs and interacting with browsers and applications is still the same as in test automation."}),"\n",(0,n.jsxs)(t.p,{children:["\ud83d\ude80"," So by this point, you should have run your first bot, have an editor / IDE up-n-and running, and have an idea of the slight differences between RPA and test automation using Robot Framework.\r\nYou are raring to go, so go ahead and check out the resources and libraries -part."]}),"\n",(0,n.jsx)(t.h2,{id:"rpa-resources-to-get-started",children:"RPA resources to get started"}),"\n",(0,n.jsx)(t.p,{children:"For the resources and libraries part you can check out the following pages:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"/docs/different_libraries/rpa",children:"RPA libraries"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"/docs/different_libraries/how_to_find_library",children:"How to find the right library"})}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"The main point to remember is that with Robot Framework and Python, there are just about no limits to what you can do. There are a ton of libraries out there, but you can also make your own."}),"\n",(0,n.jsx)(t.p,{children:"We always recommend giving back to the open-source community, as you usually get more back than you put in."}),"\n",(0,n.jsx)(t.p,{children:"For example:\r\nIt is quite rare that the business value of an RPA process is in the library that interacts with an application or an API, so why not publish the connectivity part as open-source and get others to chip in on the maintenance and improvements? This way, you can focus more on the actual RPA problem."}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"/docs/extending_robot_framework/custom-libraries/releasing_your_own_libraries",children:"Releasing your own library"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"/docs/about/contribute",children:"Help out with this documentation"})}),"\n",(0,n.jsx)(t.li,{children:"Create example bots into the public repository and ping in the forums and Slacks"}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"editors-and-ides",children:"Editors and IDEs"}),"\n",(0,n.jsx)(t.p,{children:"There is no shortage of editors for Robot Framework and Python, but for RPA work, we limit the list to get you started. In the end, what you create is just Robot Framework and Python code, so you are not limited to the tools mentioned here."}),"\n",(0,n.jsx)(t.h3,{id:"visual-studio-code",children:"Visual Studio Code"}),"\n",(0,n.jsxs)(t.p,{children:["If you are using ",(0,n.jsx)(t.a,{href:"https://code.visualstudio.com",children:"VS Code"})," or are looking for the complete feature set of developer tools, then the extensions are for you."]}),"\n",(0,n.jsxs)(t.p,{children:["\ud83d\udc49"," ",(0,n.jsx)(t.a,{href:"https://code.visualstudio.com",children:"Get VS Code here"})]}),"\n",(0,n.jsx)(t.p,{children:"To get going with RPA development, you need an extension that's call a language server protocl. Essentially it is a plug-in or extension that provides helpers within the IDE environment that assist you in writing your RPA scripts."}),"\n",(0,n.jsx)(t.h3,{id:"robot-framework-lsp-extensions-for-vs-code",children:"Robot Framework LSP extensions for VS Code"}),"\n",(0,n.jsxs)(t.p,{children:["Language Server Protocol extensions bring in code completion, documentation, highlighting, etc., for your Robot Framework code.\r\nThere are a few options here but we recommend Robot Code. It is important to ",(0,n.jsx)(t.strong,{children:"remember only to install one"})," as multiple extensions will cause problems:"]}),"\n",(0,n.jsx)(a.A,{children:(0,n.jsxs)(i.A,{value:"RobotCode",label:"Robot Code",default:!0,children:[(0,n.jsxs)(t.p,{children:["\ud83d\udc49"," ",(0,n.jsx)(t.a,{href:"https://marketplace.visualstudio.com/items?itemName=d-biehl.robotcode",children:"Get Robot Code here"})]}),(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{src:o(5326).A+"",width:"1920",height:"1080"})})]})})]})}function p(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},9365:(e,t,o)=>{o.d(t,{A:()=>i});o(6540);var n=o(8215);const r={tabItem:"tabItem_Ymn6"};var a=o(4848);function i(e){let{children:t,hidden:o,className:i}=e;return(0,a.jsx)("div",{role:"tabpanel",className:(0,n.A)(r.tabItem,i),hidden:o,children:t})}},1470:(e,t,o)=>{o.d(t,{A:()=>j});var n=o(6540),r=o(8215),a=o(3104),i=o(6347),s=o(205),l=o(7485),u=o(1682),c=o(679);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:o}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:o,attributes:n,default:r}}=e;return{value:t,label:o,attributes:n,default:r}}))}(o);return function(e){const t=(0,u.X)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,o])}function p(e){let{value:t,tabValues:o}=e;return o.some((e=>e.value===t))}function b(e){let{queryString:t=!1,groupId:o}=e;const r=(0,i.W6)(),a=function(e){let{queryString:t=!1,groupId:o}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!o)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return o??null}({queryString:t,groupId:o});return[(0,l.aZ)(a),(0,n.useCallback)((e=>{if(!a)return;const t=new URLSearchParams(r.location.search);t.set(a,e),r.replace({...r.location,search:t.toString()})}),[a,r])]}function m(e){const{defaultValue:t,queryString:o=!1,groupId:r}=e,a=h(e),[i,l]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:o}=e;if(0===o.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:o}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${o.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=o.find((e=>e.default))??o[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:a}))),[u,d]=b({queryString:o,groupId:r}),[m,f]=function(e){let{groupId:t}=e;const o=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,a]=(0,c.Dv)(o);return[r,(0,n.useCallback)((e=>{o&&a.set(e)}),[o,a])]}({groupId:r}),g=(()=>{const e=u??m;return p({value:e,tabValues:a})?e:null})();(0,s.A)((()=>{g&&l(g)}),[g]);return{selectedValue:i,selectValue:(0,n.useCallback)((e=>{if(!p({value:e,tabValues:a}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),f(e)}),[d,f,a]),tabValues:a}}var f=o(2303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=o(4848);function y(e){let{className:t,block:o,selectedValue:n,selectValue:i,tabValues:s}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,a.a_)(),c=e=>{const t=e.currentTarget,o=l.indexOf(t),r=s[o].value;r!==n&&(u(t),i(r))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const o=l.indexOf(e.currentTarget)+1;t=l[o]??l[0];break}case"ArrowLeft":{const o=l.indexOf(e.currentTarget)-1;t=l[o]??l[l.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":o},t),children:s.map((e=>{let{value:t,label:o,attributes:a}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>l.push(e),onKeyDown:d,onClick:c,...a,className:(0,r.A)("tabs__item",g.tabItem,a?.className,{"tabs__item--active":n===t}),children:o??t},t)}))})}function x(e){let{lazy:t,children:o,selectedValue:r}=e;const a=(Array.isArray(o)?o:[o]).filter(Boolean);if(t){const e=a.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:a.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r})))})}function w(e){const t=m(e);return(0,v.jsxs)("div",{className:(0,r.A)("tabs-container",g.tabList),children:[(0,v.jsx)(y,{...t,...e}),(0,v.jsx)(x,{...t,...e})]})}function j(e){const t=(0,f.A)();return(0,v.jsx)(w,{...e,children:d(e.children)},String(t))}},5326:(e,t,o)=>{o.d(t,{A:()=>n});const n=o.p+"assets/images/vscode-robotcode-1cbfb2c2349e975b197b73fa300019a4.gif"},8453:(e,t,o)=>{o.d(t,{R:()=>i,x:()=>s});var n=o(6540);const r={},a=n.createContext(r);function i(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.6a4fd3c7.js b/assets/js/runtime~main.4846e158.js similarity index 98% rename from assets/js/runtime~main.6a4fd3c7.js rename to assets/js/runtime~main.4846e158.js index 396278e8..e331c2b2 100644 --- a/assets/js/runtime~main.6a4fd3c7.js +++ b/assets/js/runtime~main.4846e158.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,t,d,r,c={},f={};function b(e){var a=f[e];if(void 0!==a)return a.exports;var t=f[e]={exports:{}};return c[e].call(t.exports,t,t.exports,b),t.exports}b.m=c,e=[],b.O=(a,t,d,r)=>{if(!t){var c=1/0;for(i=0;i=r)&&Object.keys(b.O).every((e=>b.O[e](t[o])))?t.splice(o--,1):(f=!1,r0&&e[i-1][2]>r;i--)e[i]=e[i-1];e[i]=[t,d,r]},b.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return b.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var r=Object.create(null);b.r(r);var c={};a=a||[null,t({}),t([]),t(t)];for(var f=2&d&&e;"object"==typeof f&&!~a.indexOf(f);f=t(f))Object.getOwnPropertyNames(f).forEach((a=>c[a]=()=>e[a]));return c.default=()=>e,b.d(r,c),r},b.d=(e,a)=>{for(var t in a)b.o(a,t)&&!b.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce(((a,t)=>(b.f[t](e,a),a)),[])),b.u=e=>"assets/js/"+({308:"4edc808e",377:"1e97172b",649:"3966c8c2",849:"0058b4c6",924:"06d554fa",957:"c141421f",963:"8eaefd7d",1070:"676949b8",1071:"7f054a2a",1235:"a7456010",1316:"d335e700",1363:"095b8897",1990:"2abe96bb",2067:"3d107528",2089:"caefbe75",2138:"1a4e3797",2348:"16d94906",2634:"c4f5d8e4",2736:"03a26634",3331:"41b8106b",3695:"2219eefb",3742:"d41c70b6",4012:"629c335b",4017:"a6354d69",4134:"393be207",4354:"a35b9c0d",4425:"88d9cf00",4738:"78b86cd7",4968:"e6e478e3",5294:"ed9667d2",5554:"4a676520",5742:"aba21aa0",5758:"3dad4aae",5963:"15a8aaa8",6061:"1f391b9e",6191:"cffd46d3",6507:"c948127d",6532:"08a7e062",6571:"f041c855",7098:"a7bd4aaa",7115:"e370ae18",7135:"c6452a81",7350:"09bf824f",7367:"08b0fd35",7635:"48956893",7758:"192704f0",7846:"379aa617",7939:"a7077ceb",8097:"4397b8f1",8374:"71d14268",8401:"17896441",8508:"c0c65583",8528:"85218b1d",8981:"380dfa00",9048:"a94703ab",9647:"5e95c892",9918:"4974b2de"}[e]||e)+"."+{308:"ed08a4c9",377:"6445d6b0",416:"36a683d5",649:"e2285c83",849:"cd5cb624",924:"878c76c3",957:"94fe8bc5",963:"0abe5b6b",1070:"6166643f",1071:"e3d1a48d",1235:"7b4b0a20",1316:"8fc1b4ed",1363:"ec2200db",1990:"8c230408",2067:"093b52d6",2089:"b00b6adc",2138:"92e1f722",2237:"9d50d804",2348:"e8c69296",2634:"c0342bce",2736:"e6c0f2b5",3331:"b050b309",3695:"d9988371",3742:"9f5311dd",4012:"ccdb357c",4017:"798add9e",4134:"12ec61c2",4354:"91eb6cef",4425:"b2b0c32d",4738:"3ff76de8",4968:"98cea84e",5294:"510bfcb2",5394:"0b3e82e5",5554:"b3ba0f2e",5742:"9ac6642b",5758:"67d367b1",5963:"9a0ce681",6061:"0d7187e0",6191:"f9f6196d",6507:"cf1825fb",6532:"1803efac",6571:"4cb3019c",6870:"fd7b5847",6906:"950d99df",7098:"dc097708",7115:"3229a0db",7135:"a5826b15",7350:"c8a30bf9",7367:"32313c62",7635:"698d4ecf",7758:"dccd25fd",7846:"416f5171",7939:"aafa8bf1",7958:"87e4428d",8097:"d2afc8af",8374:"1bfe1d8b",8401:"d2a62255",8508:"56360eb7",8528:"b158fd78",8913:"83bce4ad",8981:"877c0a24",9048:"a57082d5",9462:"b5f9db17",9647:"722c003c",9918:"da6d6dac"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},r="website:",b.l=(e,a,t,c)=>{if(d[e])d[e].push(a);else{var f,o;if(void 0!==t)for(var n=document.getElementsByTagName("script"),i=0;i{f.onerror=f.onload=null,clearTimeout(s);var r=d[e];if(delete d[e],f.parentNode&&f.parentNode.removeChild(f),r&&r.forEach((e=>e(t))),a)return a(t)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=l.bind(null,f.onerror),f.onload=l.bind(null,f.onload),o&&document.head.appendChild(f)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/",b.gca=function(e){return e={17896441:"8401",48956893:"7635","4edc808e":"308","1e97172b":"377","3966c8c2":"649","0058b4c6":"849","06d554fa":"924",c141421f:"957","8eaefd7d":"963","676949b8":"1070","7f054a2a":"1071",a7456010:"1235",d335e700:"1316","095b8897":"1363","2abe96bb":"1990","3d107528":"2067",caefbe75:"2089","1a4e3797":"2138","16d94906":"2348",c4f5d8e4:"2634","03a26634":"2736","41b8106b":"3331","2219eefb":"3695",d41c70b6:"3742","629c335b":"4012",a6354d69:"4017","393be207":"4134",a35b9c0d:"4354","88d9cf00":"4425","78b86cd7":"4738",e6e478e3:"4968",ed9667d2:"5294","4a676520":"5554",aba21aa0:"5742","3dad4aae":"5758","15a8aaa8":"5963","1f391b9e":"6061",cffd46d3:"6191",c948127d:"6507","08a7e062":"6532",f041c855:"6571",a7bd4aaa:"7098",e370ae18:"7115",c6452a81:"7135","09bf824f":"7350","08b0fd35":"7367","192704f0":"7758","379aa617":"7846",a7077ceb:"7939","4397b8f1":"8097","71d14268":"8374",c0c65583:"8508","85218b1d":"8528","380dfa00":"8981",a94703ab:"9048","5e95c892":"9647","4974b2de":"9918"}[e]||e,b.p+b.u(e)},(()=>{var e={5354:0,1869:0};b.f.j=(a,t)=>{var d=b.o(e,a)?e[a]:void 0;if(0!==d)if(d)t.push(d[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var r=new Promise(((t,r)=>d=e[a]=[t,r]));t.push(d[2]=r);var c=b.p+b.u(a),f=new Error;b.l(c,(t=>{if(b.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var r=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;f.message="Loading chunk "+a+" failed.\n("+r+": "+c+")",f.name="ChunkLoadError",f.type=r,f.request=c,d[1](f)}}),"chunk-"+a,a)}},b.O.j=a=>0===e[a];var a=(a,t)=>{var d,r,c=t[0],f=t[1],o=t[2],n=0;if(c.some((a=>0!==e[a]))){for(d in f)b.o(f,d)&&(b.m[d]=f[d]);if(o)var i=o(b)}for(a&&a(t);n{"use strict";var e,a,t,d,r,c={},f={};function b(e){var a=f[e];if(void 0!==a)return a.exports;var t=f[e]={exports:{}};return c[e].call(t.exports,t,t.exports,b),t.exports}b.m=c,e=[],b.O=(a,t,d,r)=>{if(!t){var c=1/0;for(i=0;i=r)&&Object.keys(b.O).every((e=>b.O[e](t[o])))?t.splice(o--,1):(f=!1,r0&&e[i-1][2]>r;i--)e[i]=e[i-1];e[i]=[t,d,r]},b.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return b.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var r=Object.create(null);b.r(r);var c={};a=a||[null,t({}),t([]),t(t)];for(var f=2&d&&e;"object"==typeof f&&!~a.indexOf(f);f=t(f))Object.getOwnPropertyNames(f).forEach((a=>c[a]=()=>e[a]));return c.default=()=>e,b.d(r,c),r},b.d=(e,a)=>{for(var t in a)b.o(a,t)&&!b.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce(((a,t)=>(b.f[t](e,a),a)),[])),b.u=e=>"assets/js/"+({308:"4edc808e",377:"1e97172b",649:"3966c8c2",849:"0058b4c6",924:"06d554fa",957:"c141421f",963:"8eaefd7d",1070:"676949b8",1071:"7f054a2a",1235:"a7456010",1316:"d335e700",1363:"095b8897",1990:"2abe96bb",2067:"3d107528",2089:"caefbe75",2138:"1a4e3797",2348:"16d94906",2634:"c4f5d8e4",2736:"03a26634",3331:"41b8106b",3695:"2219eefb",3742:"d41c70b6",4012:"629c335b",4017:"a6354d69",4134:"393be207",4354:"a35b9c0d",4425:"88d9cf00",4738:"78b86cd7",4968:"e6e478e3",5294:"ed9667d2",5554:"4a676520",5742:"aba21aa0",5758:"3dad4aae",5963:"15a8aaa8",6061:"1f391b9e",6191:"cffd46d3",6507:"c948127d",6532:"08a7e062",6571:"f041c855",7098:"a7bd4aaa",7115:"e370ae18",7135:"c6452a81",7350:"09bf824f",7367:"08b0fd35",7635:"48956893",7758:"192704f0",7846:"379aa617",7939:"a7077ceb",8097:"4397b8f1",8374:"71d14268",8401:"17896441",8508:"c0c65583",8528:"85218b1d",8981:"380dfa00",9048:"a94703ab",9647:"5e95c892",9918:"4974b2de"}[e]||e)+"."+{308:"ed08a4c9",377:"6445d6b0",416:"36a683d5",649:"e2285c83",849:"cd5cb624",924:"878c76c3",957:"94fe8bc5",963:"0abe5b6b",1070:"6166643f",1071:"e3d1a48d",1235:"7b4b0a20",1316:"8fc1b4ed",1363:"ec2200db",1990:"8c230408",2067:"093b52d6",2089:"b00b6adc",2138:"92e1f722",2237:"9d50d804",2348:"e8c69296",2634:"c0342bce",2736:"e6c0f2b5",3331:"b050b309",3695:"d9988371",3742:"9f5311dd",4012:"ccdb357c",4017:"f31fe8cd",4134:"12ec61c2",4354:"91eb6cef",4425:"b2b0c32d",4738:"3ff76de8",4968:"98cea84e",5294:"510bfcb2",5394:"0b3e82e5",5554:"b3ba0f2e",5742:"9ac6642b",5758:"67d367b1",5963:"9a0ce681",6061:"0d7187e0",6191:"f9f6196d",6507:"cf1825fb",6532:"1803efac",6571:"4cb3019c",6870:"fd7b5847",6906:"950d99df",7098:"dc097708",7115:"3229a0db",7135:"a5826b15",7350:"c8a30bf9",7367:"32313c62",7635:"698d4ecf",7758:"dccd25fd",7846:"416f5171",7939:"aafa8bf1",7958:"87e4428d",8097:"d2afc8af",8374:"1bfe1d8b",8401:"d2a62255",8508:"56360eb7",8528:"b158fd78",8913:"83bce4ad",8981:"877c0a24",9048:"a57082d5",9462:"b5f9db17",9647:"722c003c",9918:"da6d6dac"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},r="website:",b.l=(e,a,t,c)=>{if(d[e])d[e].push(a);else{var f,o;if(void 0!==t)for(var n=document.getElementsByTagName("script"),i=0;i{f.onerror=f.onload=null,clearTimeout(s);var r=d[e];if(delete d[e],f.parentNode&&f.parentNode.removeChild(f),r&&r.forEach((e=>e(t))),a)return a(t)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=l.bind(null,f.onerror),f.onload=l.bind(null,f.onload),o&&document.head.appendChild(f)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/",b.gca=function(e){return e={17896441:"8401",48956893:"7635","4edc808e":"308","1e97172b":"377","3966c8c2":"649","0058b4c6":"849","06d554fa":"924",c141421f:"957","8eaefd7d":"963","676949b8":"1070","7f054a2a":"1071",a7456010:"1235",d335e700:"1316","095b8897":"1363","2abe96bb":"1990","3d107528":"2067",caefbe75:"2089","1a4e3797":"2138","16d94906":"2348",c4f5d8e4:"2634","03a26634":"2736","41b8106b":"3331","2219eefb":"3695",d41c70b6:"3742","629c335b":"4012",a6354d69:"4017","393be207":"4134",a35b9c0d:"4354","88d9cf00":"4425","78b86cd7":"4738",e6e478e3:"4968",ed9667d2:"5294","4a676520":"5554",aba21aa0:"5742","3dad4aae":"5758","15a8aaa8":"5963","1f391b9e":"6061",cffd46d3:"6191",c948127d:"6507","08a7e062":"6532",f041c855:"6571",a7bd4aaa:"7098",e370ae18:"7115",c6452a81:"7135","09bf824f":"7350","08b0fd35":"7367","192704f0":"7758","379aa617":"7846",a7077ceb:"7939","4397b8f1":"8097","71d14268":"8374",c0c65583:"8508","85218b1d":"8528","380dfa00":"8981",a94703ab:"9048","5e95c892":"9647","4974b2de":"9918"}[e]||e,b.p+b.u(e)},(()=>{var e={5354:0,1869:0};b.f.j=(a,t)=>{var d=b.o(e,a)?e[a]:void 0;if(0!==d)if(d)t.push(d[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var r=new Promise(((t,r)=>d=e[a]=[t,r]));t.push(d[2]=r);var c=b.p+b.u(a),f=new Error;b.l(c,(t=>{if(b.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var r=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;f.message="Loading chunk "+a+" failed.\n("+r+": "+c+")",f.name="ChunkLoadError",f.type=r,f.request=c,d[1](f)}}),"chunk-"+a,a)}},b.O.j=a=>0===e[a];var a=(a,t)=>{var d,r,c=t[0],f=t[1],o=t[2],n=0;if(c.some((a=>0!==e[a]))){for(d in f)b.o(f,d)&&(b.m[d]=f[d]);if(o)var i=o(b)}for(a&&a(t);n Welcome to | ROBOT FRAMEWORK - + diff --git a/docs/about/about_us.html b/docs/about/about_us.html index 401a9a46..093991b8 100644 --- a/docs/about/about_us.html +++ b/docs/about/about_us.html @@ -5,7 +5,7 @@ About RF Guides | ROBOT FRAMEWORK - + diff --git a/docs/about/contribute.html b/docs/about/contribute.html index 29b3677a..5e8787aa 100644 --- a/docs/about/contribute.html +++ b/docs/about/contribute.html @@ -5,7 +5,7 @@ How to contribute | ROBOT FRAMEWORK - + diff --git a/docs/different_libraries/appium.html b/docs/different_libraries/appium.html index dc43daec..139a01dc 100644 --- a/docs/different_libraries/appium.html +++ b/docs/different_libraries/appium.html @@ -5,7 +5,7 @@ Appium Library | ROBOT FRAMEWORK - + diff --git a/docs/different_libraries/browser.html b/docs/different_libraries/browser.html index 18d78ea8..70376fe1 100644 --- a/docs/different_libraries/browser.html +++ b/docs/different_libraries/browser.html @@ -5,7 +5,7 @@ Browser Library | ROBOT FRAMEWORK - + diff --git a/docs/different_libraries/database.html b/docs/different_libraries/database.html index c6876b9f..dda8ccf7 100644 --- a/docs/different_libraries/database.html +++ b/docs/different_libraries/database.html @@ -5,7 +5,7 @@ Database Library | ROBOT FRAMEWORK - + diff --git a/docs/different_libraries/how_to_find_library.html b/docs/different_libraries/how_to_find_library.html index 0487e4b0..0f01df5a 100644 --- a/docs/different_libraries/how_to_find_library.html +++ b/docs/different_libraries/how_to_find_library.html @@ -5,7 +5,7 @@ How to find the right library | ROBOT FRAMEWORK - + diff --git a/docs/different_libraries/overview.html b/docs/different_libraries/overview.html index 522d3f05..1ac83c42 100644 --- a/docs/different_libraries/overview.html +++ b/docs/different_libraries/overview.html @@ -5,7 +5,7 @@ Library Overview | ROBOT FRAMEWORK - + diff --git a/docs/different_libraries/requests.html b/docs/different_libraries/requests.html index cd9d43c8..a4151d51 100644 --- a/docs/different_libraries/requests.html +++ b/docs/different_libraries/requests.html @@ -5,7 +5,7 @@ Requests Library | ROBOT FRAMEWORK - + diff --git a/docs/different_libraries/rpa.html b/docs/different_libraries/rpa.html index bf9289f9..f3ffb096 100644 --- a/docs/different_libraries/rpa.html +++ b/docs/different_libraries/rpa.html @@ -5,7 +5,7 @@ RPA Framework | ROBOT FRAMEWORK - + diff --git a/docs/different_libraries/selenium.html b/docs/different_libraries/selenium.html index c6b5571e..a46e6c3e 100644 --- a/docs/different_libraries/selenium.html +++ b/docs/different_libraries/selenium.html @@ -5,7 +5,7 @@ Selenium Library | ROBOT FRAMEWORK - + diff --git a/docs/different_libraries/standard.html b/docs/different_libraries/standard.html index 561d4947..e90dc26b 100644 --- a/docs/different_libraries/standard.html +++ b/docs/different_libraries/standard.html @@ -5,7 +5,7 @@ Standard Library | ROBOT FRAMEWORK - + diff --git a/docs/examples/insurance.html b/docs/examples/insurance.html index 557ae8b6..bbd6c0da 100644 --- a/docs/examples/insurance.html +++ b/docs/examples/insurance.html @@ -5,7 +5,7 @@ Vehicle Insurance App | ROBOT FRAMEWORK - + diff --git a/docs/examples/mfa_login.html b/docs/examples/mfa_login.html index 1311cc4f..e98c13c7 100644 --- a/docs/examples/mfa_login.html +++ b/docs/examples/mfa_login.html @@ -5,7 +5,7 @@ Login with Multi Factor Authentication | ROBOT FRAMEWORK - + diff --git a/docs/examples/overview.html b/docs/examples/overview.html index 58331ecf..6ef50e5a 100644 --- a/docs/examples/overview.html +++ b/docs/examples/overview.html @@ -5,7 +5,7 @@ Examples Overview | ROBOT FRAMEWORK - + diff --git a/docs/examples/project_structure.html b/docs/examples/project_structure.html index d8c4db86..2e96bd91 100644 --- a/docs/examples/project_structure.html +++ b/docs/examples/project_structure.html @@ -5,7 +5,7 @@ Project Structure | ROBOT FRAMEWORK - + diff --git a/docs/examples/restfulbooker.html b/docs/examples/restfulbooker.html index 8f3a97e9..165aed2c 100644 --- a/docs/examples/restfulbooker.html +++ b/docs/examples/restfulbooker.html @@ -5,7 +5,7 @@ Restful Booker | ROBOT FRAMEWORK - + diff --git a/docs/examples/todo.html b/docs/examples/todo.html index 319f8a80..1ece4d00 100644 --- a/docs/examples/todo.html +++ b/docs/examples/todo.html @@ -5,7 +5,7 @@ TodoMVC | ROBOT FRAMEWORK - + diff --git a/docs/extending_robot_framework/custom-libraries/non-python_library.html b/docs/extending_robot_framework/custom-libraries/non-python_library.html index fd7bbda0..910bb0d3 100644 --- a/docs/extending_robot_framework/custom-libraries/non-python_library.html +++ b/docs/extending_robot_framework/custom-libraries/non-python_library.html @@ -5,7 +5,7 @@ Non-Python Libraries | ROBOT FRAMEWORK - + diff --git a/docs/extending_robot_framework/custom-libraries/python_library.html b/docs/extending_robot_framework/custom-libraries/python_library.html index 21b78295..92412e88 100644 --- a/docs/extending_robot_framework/custom-libraries/python_library.html +++ b/docs/extending_robot_framework/custom-libraries/python_library.html @@ -5,7 +5,7 @@ Python Libraries | ROBOT FRAMEWORK - + diff --git a/docs/extending_robot_framework/custom-libraries/releasing_your_own_libraries.html b/docs/extending_robot_framework/custom-libraries/releasing_your_own_libraries.html index d47e3525..ab640ee9 100644 --- a/docs/extending_robot_framework/custom-libraries/releasing_your_own_libraries.html +++ b/docs/extending_robot_framework/custom-libraries/releasing_your_own_libraries.html @@ -5,7 +5,7 @@ Package and Release Your Own Libraries | ROBOT FRAMEWORK - + diff --git a/docs/extending_robot_framework/listeners_prerun_api/listeners.html b/docs/extending_robot_framework/listeners_prerun_api/listeners.html index 9925f87b..6f8845a9 100644 --- a/docs/extending_robot_framework/listeners_prerun_api/listeners.html +++ b/docs/extending_robot_framework/listeners_prerun_api/listeners.html @@ -5,7 +5,7 @@ Listener Interface | ROBOT FRAMEWORK - + diff --git a/docs/extending_robot_framework/listeners_prerun_api/overview.html b/docs/extending_robot_framework/listeners_prerun_api/overview.html index a2fe33f8..3932e3ca 100644 --- a/docs/extending_robot_framework/listeners_prerun_api/overview.html +++ b/docs/extending_robot_framework/listeners_prerun_api/overview.html @@ -5,7 +5,7 @@ Overview | ROBOT FRAMEWORK - + diff --git a/docs/extending_robot_framework/listeners_prerun_api/prerunmodifier.html b/docs/extending_robot_framework/listeners_prerun_api/prerunmodifier.html index 43737feb..0278d97d 100644 --- a/docs/extending_robot_framework/listeners_prerun_api/prerunmodifier.html +++ b/docs/extending_robot_framework/listeners_prerun_api/prerunmodifier.html @@ -5,7 +5,7 @@ PreRunModifier | ROBOT FRAMEWORK - + diff --git a/docs/extending_robot_framework/listeners_prerun_api/rf-api.html b/docs/extending_robot_framework/listeners_prerun_api/rf-api.html index 28d6b16a..97d60abd 100644 --- a/docs/extending_robot_framework/listeners_prerun_api/rf-api.html +++ b/docs/extending_robot_framework/listeners_prerun_api/rf-api.html @@ -5,7 +5,7 @@ Robot Framework API | ROBOT FRAMEWORK - + diff --git a/docs/flaky_tests.html b/docs/flaky_tests.html index d64538ac..8155db26 100644 --- a/docs/flaky_tests.html +++ b/docs/flaky_tests.html @@ -5,7 +5,7 @@ Re-Execute failed tests | ROBOT FRAMEWORK - + diff --git a/docs/getting_started/ide.html b/docs/getting_started/ide.html index 650fa72d..223de68f 100644 --- a/docs/getting_started/ide.html +++ b/docs/getting_started/ide.html @@ -5,7 +5,7 @@ Set up your IDE | ROBOT FRAMEWORK - + diff --git a/docs/getting_started/rpa.html b/docs/getting_started/rpa.html index 6bc63b5a..e819ef22 100644 --- a/docs/getting_started/rpa.html +++ b/docs/getting_started/rpa.html @@ -5,56 +5,11 @@ I'm looking for RPA | ROBOT FRAMEWORK - + -

I'm looking for RPA

🚀 Welcome!
-You can find more explanations and guidance down below, but first, let's get you running a bot :runner:

-

Run your first robot

-

The scripts below enable you to get a robot setup and running from a selection of templates using a CLI tool called RCC

-
curl -o rcc.exe https://downloads.robocorp.com/rcc/releases/latest/windows64/rcc.exe
rcc create example
cd example
..\rcc run
-

The first run sets up the environment, so it takes a bit longer, but if you do the rcc run a second time, you'll see the power of RCC.

-

🚀 With your bot running, you can now look deeper into what you just did and then jump on to editors to get cracking.

-

What is this RCC?

-

RCC is an open-source tool that handles everything essential around an RPA robot run on Windows, macOS, and Linux. With RCC, the machine running the robot does not even need Python installed.

-

So, if you look back into the first robot you ran, you will see the following:

-
    -
  1. The environment your bot needs is defined in: conda.yaml
  2. -
  3. How your robot is executed is defined in: robot.yaml
  4. -
  5. The logic of your bot is in Robot Framework (.robot) or Python (.py) -files... or both.
  6. -
-

With the above files RCC can set up an isolated environment and ensure your bot runs the same way every time.
-👉 Get rid of: "Works on my machine".

-
-

RCC has a lot of cool tricks, so once you've gotten started, it is worth check out some more

-
-

🚀 So now you have your bot running and have a slight idea how you got there; what next?
-You need to see and edit your bot code to get it doing what you need, so head-on to the Editor and IDEs

-

Editors and IDEs

-

There is no shortage of editors for Robot Framework and Python, but for RPA work, we limit the list to get you started. In the end, what you create is just Robot Framework and Python code, so you are not limited to the tools mentioned here.

-

Automation Studio

-

If you are unfamiliar with coding and tools like VS Code, we'd recommend starting with a tool like Automation Studio.

-

-

This kind of IDE enables you to start without worrying about syntax, environments, etc., right from the bat. You can still get quite far, and the tool allows you to see and edit on the code level. Automation Studio is also creating a robot just like the first RCC bot, so you can jump to other tools if you feel limited.

-
-

For the test automation people:
-Note that there is very little RPA specific about Automation Studio as it is just generating Robot Framework code.
-Even hard-boiled coders like to do things easy once in a while 😉

-
-

Visual Studio Code

-

If you are using VS Code or are looking for the complete feature set of developer tools, then the extensions are for you.

-

👉 Get VS Code here

-

To get going with RPA development, you need two extensions: The extension for LSP and the RCC extension.

-

RCC extension for VS Code

-

This extension brings in the RCC functionality with command palette commands and a nice sidebar.

-

👉 Get Robocorp Code here

-

-

Robot Framework LSP extensions for VS Code

-

Language Server Protocol extensions bring in code completion, documentation, highlighting, etc., for your Robot Framework code. -There are options here, but remember only to install one as multiple LSP handlers will cause problems:

-
-

About Robotic Process Automation (RPA)

+

I'm looking for RPA

About Robotic Process Automation (RPA)

Robotic Process Automation (RPA) is similar to test automation on the technical level, but the mentality is different on the business and results side. In RPA, it is pretty standard that you are not running on a machine you control entirely, so your robot needs to be "self-sufficient" and isolated. Also, instead of finding and documenting places where robot execution fails or succeeds, the aim is always to succeed and get the result of the process.

Isolation and repeatability are the other vital points in RPA. The bot needs to execute with minimal setup by IT people, and where governance is a thing, locking down your dependencies is a must-have feature. With RCC environment caching and wrapping features, you can lock down your dependencies to the actual unique files. In RPA, you do not want loose dependency handling breaking your production bots.

@@ -70,11 +25,6 @@

  • RPA libraries
  • How to find the right library
  • -
  • Sources for RPA example in Robot Framework: - -
  • The main point to remember is that with Robot Framework and Python, there are just about no limits to what you can do. There are a ton of libraries out there, but you can also make your own.

    We always recommend giving back to the open-source community, as you usually get more back than you put in.

    @@ -84,6 +34,16 @@

    Releasing your own library
  • Help out with this documentation
  • Create example bots into the public repository and ping in the forums and Slacks
  • -

    + +

    Editors and IDEs

    +

    There is no shortage of editors for Robot Framework and Python, but for RPA work, we limit the list to get you started. In the end, what you create is just Robot Framework and Python code, so you are not limited to the tools mentioned here.

    +

    Visual Studio Code

    +

    If you are using VS Code or are looking for the complete feature set of developer tools, then the extensions are for you.

    +

    👉 Get VS Code here

    +

    To get going with RPA development, you need an extension that's call a language server protocl. Essentially it is a plug-in or extension that provides helpers within the IDE environment that assist you in writing your RPA scripts.

    +

    Robot Framework LSP extensions for VS Code

    +

    Language Server Protocol extensions bring in code completion, documentation, highlighting, etc., for your Robot Framework code. +There are a few options here but we recommend Robot Code. It is important to remember only to install one as multiple extensions will cause problems:

    +
    \ No newline at end of file diff --git a/docs/getting_started/testing.html b/docs/getting_started/testing.html index 299670ee..c08dc2dc 100644 --- a/docs/getting_started/testing.html +++ b/docs/getting_started/testing.html @@ -5,7 +5,7 @@ I'm looking for testing | ROBOT FRAMEWORK - + diff --git a/docs/getting_started/videos.html b/docs/getting_started/videos.html index 0f86737e..57ec6351 100644 --- a/docs/getting_started/videos.html +++ b/docs/getting_started/videos.html @@ -5,7 +5,7 @@ Videos and Tutorials | ROBOT FRAMEWORK - + diff --git a/docs/parallel.html b/docs/parallel.html index 2b976a55..eeb37c23 100644 --- a/docs/parallel.html +++ b/docs/parallel.html @@ -5,7 +5,7 @@ Running tests in parallel | ROBOT FRAMEWORK - + diff --git a/docs/parsing_results.html b/docs/parsing_results.html index f97ee495..ac024ee8 100644 --- a/docs/parsing_results.html +++ b/docs/parsing_results.html @@ -5,7 +5,7 @@ Parsing Test Results | ROBOT FRAMEWORK - + diff --git a/docs/reporting_alternatives.html b/docs/reporting_alternatives.html index 5c28211f..ac41a06a 100644 --- a/docs/reporting_alternatives.html +++ b/docs/reporting_alternatives.html @@ -5,7 +5,7 @@ Reporting Test Results | ROBOT FRAMEWORK - + diff --git a/docs/style_guide.html b/docs/style_guide.html index 06379f43..c99b066c 100644 --- a/docs/style_guide.html +++ b/docs/style_guide.html @@ -5,7 +5,7 @@ Style Guide | ROBOT FRAMEWORK - + diff --git a/docs/testcase_styles/bdd.html b/docs/testcase_styles/bdd.html index 3bf289ef..8493ae24 100644 --- a/docs/testcase_styles/bdd.html +++ b/docs/testcase_styles/bdd.html @@ -5,7 +5,7 @@ BDD (Behavior Driven Development) | ROBOT FRAMEWORK - + diff --git a/docs/testcase_styles/datadriven.html b/docs/testcase_styles/datadriven.html index bd25b801..a1fbfa92 100644 --- a/docs/testcase_styles/datadriven.html +++ b/docs/testcase_styles/datadriven.html @@ -5,7 +5,7 @@ DataDriven Tests | ROBOT FRAMEWORK - + diff --git a/docs/using_rf_in_ci_systems/ci.html b/docs/using_rf_in_ci_systems/ci.html index d06b868d..b551c763 100644 --- a/docs/using_rf_in_ci_systems/ci.html +++ b/docs/using_rf_in_ci_systems/ci.html @@ -5,7 +5,7 @@ CI Systems | ROBOT FRAMEWORK - + diff --git a/docs/using_rf_in_ci_systems/ci/azure-devops.html b/docs/using_rf_in_ci_systems/ci/azure-devops.html index b3b5842d..53b3d4d6 100644 --- a/docs/using_rf_in_ci_systems/ci/azure-devops.html +++ b/docs/using_rf_in_ci_systems/ci/azure-devops.html @@ -5,7 +5,7 @@ Azure DevOps | ROBOT FRAMEWORK - + diff --git a/docs/using_rf_in_ci_systems/ci/github-actions.html b/docs/using_rf_in_ci_systems/ci/github-actions.html index 07e6cd32..a298d5a9 100644 --- a/docs/using_rf_in_ci_systems/ci/github-actions.html +++ b/docs/using_rf_in_ci_systems/ci/github-actions.html @@ -5,7 +5,7 @@ ⛔ GitHub Actions | ROBOT FRAMEWORK - + diff --git a/docs/using_rf_in_ci_systems/ci/gitlab.html b/docs/using_rf_in_ci_systems/ci/gitlab.html index db5d07c5..8161ea16 100644 --- a/docs/using_rf_in_ci_systems/ci/gitlab.html +++ b/docs/using_rf_in_ci_systems/ci/gitlab.html @@ -5,7 +5,7 @@ GitLab | ROBOT FRAMEWORK - + diff --git a/docs/using_rf_in_ci_systems/ci/jenkins.html b/docs/using_rf_in_ci_systems/ci/jenkins.html index 8226020a..07a4f16a 100644 --- a/docs/using_rf_in_ci_systems/ci/jenkins.html +++ b/docs/using_rf_in_ci_systems/ci/jenkins.html @@ -5,7 +5,7 @@ Jenkins | ROBOT FRAMEWORK - + diff --git a/docs/using_rf_in_ci_systems/ci/teamcity.html b/docs/using_rf_in_ci_systems/ci/teamcity.html index 1d1d0457..31fdd767 100644 --- a/docs/using_rf_in_ci_systems/ci/teamcity.html +++ b/docs/using_rf_in_ci_systems/ci/teamcity.html @@ -5,7 +5,7 @@ ⛔ TeamCity | ROBOT FRAMEWORK - + diff --git a/docs/using_rf_in_ci_systems/docker.html b/docs/using_rf_in_ci_systems/docker.html index 72136dd8..73a3aed7 100644 --- a/docs/using_rf_in_ci_systems/docker.html +++ b/docs/using_rf_in_ci_systems/docker.html @@ -5,7 +5,7 @@ Docker Images for Robot Framework | ROBOT FRAMEWORK - + diff --git a/docs/using_rf_in_ci_systems/playground.html b/docs/using_rf_in_ci_systems/playground.html index 0f27d07f..c8433fe6 100644 --- a/docs/using_rf_in_ci_systems/playground.html +++ b/docs/using_rf_in_ci_systems/playground.html @@ -5,7 +5,7 @@ Play With Docker | ROBOT FRAMEWORK - + diff --git a/docs/variables.html b/docs/variables.html index 1de986db..b9bb6c9f 100644 --- a/docs/variables.html +++ b/docs/variables.html @@ -5,7 +5,7 @@ Variables | ROBOT FRAMEWORK - + diff --git a/index.html b/index.html index d0cd28ef..502b49e7 100644 --- a/index.html +++ b/index.html @@ -5,7 +5,7 @@ Hello from ROBOT FRAMEWORK | ROBOT FRAMEWORK - + diff --git a/markdown-page.html b/markdown-page.html index af12994e..8ae507d0 100644 --- a/markdown-page.html +++ b/markdown-page.html @@ -5,7 +5,7 @@ Markdown page example | ROBOT FRAMEWORK - + diff --git a/search.html b/search.html index b0c8d761..baf7564b 100644 --- a/search.html +++ b/search.html @@ -5,7 +5,7 @@ Search the documentation | ROBOT FRAMEWORK - +