-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path27654257.986f0ea5.js
1 lines (1 loc) · 21.9 KB
/
27654257.986f0ea5.js
1
(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{100:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return i})),n.d(t,"metadata",(function(){return l})),n.d(t,"rightToc",(function(){return p})),n.d(t,"default",(function(){return b}));var o=n(3),a=n(7),r=(n(0),n(216)),i={id:"go-to-link",title:"Go to link"},l={unversionedId:"actions/web/go-to-link",id:"actions/web/go-to-link",isDocsHomePage:!1,title:"Go to link",description:"Go to link document and Web related queries",source:"@site/docs\\actions\\web\\go-to-link.md",slug:"/actions/web/go-to-link",permalink:"/docs/actions/web/go-to-link",version:"current",sidebar:"docs",previous:{title:"Web actions",permalink:"/docs/actions-web"},next:{title:"Save and Read Mail Action",permalink:"/docs/actions/web/save-and-read-mail-action"}},p=[{value:"Capabilities vs Options:",id:"capabilities-vs-options",children:[{value:"1. Capabilities:",id:"1-capabilities",children:[]},{value:"2. Options:",id:"2-options",children:[]},{value:"Functions:",id:"functions",children:[]}]},{value:"Dataset:",id:"dataset",children:[{value:"Example:",id:"example",children:[]}]},{value:"Queries:",id:"queries",children:[]},{value:"Default arguments used by zeuz",id:"default-arguments-used-by-zeuz",children:[{value:"All browsers",id:"all-browsers",children:[]},{value:"Chrome & Edge",id:"chrome--edge",children:[]},{value:"Firefox",id:"firefox",children:[]}]},{value:"Links:",id:"links",children:[]}],s={rightToc:p};function b(e){var t=e.components,n=Object(a.a)(e,["components"]);return Object(r.b)("wrapper",Object(o.a)({},s,n,{components:t,mdxType:"MDXLayout"}),Object(r.b)("h1",{id:"go-to-link-document-and-web-related-queries"},"Go to link document and Web related queries"),Object(r.b)("h2",{id:"capabilities-vs-options"},"Capabilities vs Options:"),Object(r.b)("h3",{id:"1-capabilities"},"1. Capabilities:"),Object(r.b)("p",null,"Capabilities are a broad configuration for the WebDriver itself, not just the browser. They define properties of the WebDriver session, which can include browser options, platform details, and browser versions. They are used to communicate overall settings for the WebDriver session, not just for Chrome but across various browsers (e.g., Firefox, Safari)."),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Node Example:")),Object(r.b)("pre",null,Object(r.b)("code",Object(o.a)({parentName:"pre"},{className:"language-python"}),'from selenium.webdriver.chrome.options import Options as ChromeOptions\noptions = ChromeOptions()\n# Commonly we set capabilities (mentioned in action) for all browser \nfor key, value in browser_options["capabilities"].items():\n options.set_capability(key, value)\n')),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Dataset example:")," Add a row, where right is a dictionary"),Object(r.b)("p",null,Object(r.b)("inlineCode",{parentName:"p"},'capabilities | shared capability | {"goog:loggingPrefs": {"performance": "ALL"}}')),Object(r.b)("h3",{id:"2-options"},"2. Options:"),Object(r.b)("p",null,"Arguments are command-line flags passed directly to the Chrome binary to modify the browser\u2019s behavior, such as running it in headless mode, disabling extensions, or setting window size. They affect how Chrome behaves during the session and are specific to Chrome (not other browsers)."),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Node Example:")),Object(r.b)("pre",null,Object(r.b)("code",Object(o.a)({parentName:"pre"},{className:"language-python"}),'from selenium.webdriver.chrome.options import Options as ChromeOptions\noptions = ChromeOptions()\n# We add arguments/preferences/experimental_options/extension to the specific browser mentioned in the action mid column\noptions.add_argument("--ignore-ssl-errors")\noptions.add_experimental_option("mobileEmulation", {"deviceName": "Pixel 2 XL"})\noptions.add_extension("/path/to/crx_file")\noptions.add_encoded_extension("extension_in_base64_string")\n\n# Firefox has set_preference option\nfrom selenium.webdriver.firefox.options import Options as FirefoxOptions\noptions = FirefoxOptions()\noptions.set_preference("browser.download.dir", \'path/to/download/dir\')\n')),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Dataset example:")," Add a row, where right is a dictionary"),Object(r.b)("p",null,Object(r.b)("inlineCode",{parentName:"p"},'add_experimental_option | chromium option | {"mobileEmulation": {"deviceName": "Pixel 2 XL"}}')),Object(r.b)("h3",{id:"functions"},"Functions:"),Object(r.b)("p",null,"So, as of now, Node works with following functions"),Object(r.b)("pre",null,Object(r.b)("code",Object(o.a)({parentName:"pre"},{className:"language-python"}),"options.set_capability(key, value) # Commonly for webdriver of all browser\noptions.set_preference(key, val) # Specific to firefox only\noptions.add_argument(val) # All browser has this function\noptions.add_experimental_option(key, val) # Chromium: chrome, edge\noptions.add_extension(val) # Chromium: chrome, edge\noptions.add_encoded_extension(val) # Chromium: chrome, edge\n")),Object(r.b)("h2",{id:"dataset"},"Dataset:"),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"1. Shared capabilities:")," This will be applied to ANY browser you select. Provide as a ",Object(r.b)("em",{parentName:"p"},"dictionary")),Object(r.b)("p",null,Object(r.b)("inlineCode",{parentName:"p"},'capabilities | shared capability | {"unhandledPromptBehavior": "ignore"}')),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"2. Page Load Strategy:")," All browser has this option, however we add this only to the browser mentioned in the mid column. Provide as a ",Object(r.b)("em",{parentName:"p"},"string")),Object(r.b)("p",null,Object(r.b)("inlineCode",{parentName:"p"},"page_load_strategy | safari option | eager")),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"3. Add Argument:")," All browser has this option, however we add this only to the browser mentioned in the mid column. Provide as ",Object(r.b)("em",{parentName:"p"},"list of strings"),".\n",Object(r.b)("inlineCode",{parentName:"p"},"add_argument | chromium option | ['--ignore-ssl-errors', '--my-custom-flag']")),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"4. Add Experimental Option:")," Chromium (chrome + edge) has this option, we add this only to the browser mentioned in the mid column. Provide as a ",Object(r.b)("em",{parentName:"p"},"dictionary"),".\n",Object(r.b)("inlineCode",{parentName:"p"},'add_experimental_option | chromium option | {"mobileEmulation": {"deviceName": "Pixel 2 XL"}}')),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"5. Add Extension:")," Chromium (chrome + edge) has this option, we add this only to the browser mentioned in the mid column. Provide as a ",Object(r.b)("em",{parentName:"p"},"list of strings"),".\n",Object(r.b)("inlineCode",{parentName:"p"},"add_extension | chromium option | ['path/to/crx_file']")),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"6. Add Encoded Extension:")," Chromium (chrome + edge) has this option, we add this only to the browser mentioned in the mid column. Provide as a ",Object(r.b)("em",{parentName:"p"},"list of strings"),".\n",Object(r.b)("inlineCode",{parentName:"p"},"add_extension | chromium option | ['extension_in_base64_string']")),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Note:")," At mid column you can mention, ",Object(r.b)("inlineCode",{parentName:"p"},"shared capability")," (applied to all browser) ",Object(r.b)("inlineCode",{parentName:"p"},"chromium option")," (chrome+edge), ",Object(r.b)("inlineCode",{parentName:"p"},"chrome option"),", ",Object(r.b)("inlineCode",{parentName:"p"},"edge option"),", ",Object(r.b)("inlineCode",{parentName:"p"},"firefox option"),", ",Object(r.b)("inlineCode",{parentName:"p"},"safari option"),". If you need any option that is not mentioned above, pls contact us."),Object(r.b)("h3",{id:"example"},"Example:"),Object(r.b)("p",null,"This Example shows how to add different arguments for different browsers"),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",Object(o.a)({parentName:"tr"},{align:null})),Object(r.b)("th",Object(o.a)({parentName:"tr"},{align:null})),Object(r.b)("th",Object(o.a)({parentName:"tr"},{align:null})))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",Object(o.a)({parentName:"tr"},{align:null}),"capabilities"),Object(r.b)("td",Object(o.a)({parentName:"tr"},{align:null}),"shared capability"),Object(r.b)("td",Object(o.a)({parentName:"tr"},{align:null}),'{"unhandledPromptBehavior": "dismiss"}')),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",Object(o.a)({parentName:"tr"},{align:null}),"add_argument"),Object(r.b)("td",Object(o.a)({parentName:"tr"},{align:null}),"chromium option"),Object(r.b)("td",Object(o.a)({parentName:"tr"},{align:null}),'["--ignore-ssl-errors", "--proxy-server=https://154.32.15.1:9898"]')),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",Object(o.a)({parentName:"tr"},{align:null}),"add_extension"),Object(r.b)("td",Object(o.a)({parentName:"tr"},{align:null}),"chromium option"),Object(r.b)("td",Object(o.a)({parentName:"tr"},{align:null}),'["path/to/crx"]')),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",Object(o.a)({parentName:"tr"},{align:null}),"add_experimental_option"),Object(r.b)("td",Object(o.a)({parentName:"tr"},{align:null}),"chromium option"),Object(r.b)("td",Object(o.a)({parentName:"tr"},{align:null}),'{"prefs": {"safebrowsing.enabled": False}}')),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",Object(o.a)({parentName:"tr"},{align:null}),"set_preference"),Object(r.b)("td",Object(o.a)({parentName:"tr"},{align:null}),"firefox option"),Object(r.b)("td",Object(o.a)({parentName:"tr"},{align:null}),'{"security.mixed_content.block_active_content": False, "network.proxy.type": 1, "network.proxy.http": "',Object(r.b)("a",Object(o.a)({parentName:"td"},{href:"https://154.32.15.1%22"}),'https://154.32.15.1"'),', "network.proxy.http_port": "9898"}')),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",Object(o.a)({parentName:"tr"},{align:null}),"page_load_strategy"),Object(r.b)("td",Object(o.a)({parentName:"tr"},{align:null}),"safari option"),Object(r.b)("td",Object(o.a)({parentName:"tr"},{align:null}),"eager")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",Object(o.a)({parentName:"tr"},{align:null}),"go to link"),Object(r.b)("td",Object(o.a)({parentName:"tr"},{align:null}),"selenium action"),Object(r.b)("td",Object(o.a)({parentName:"tr"},{align:null}),Object(r.b)("a",Object(o.a)({parentName:"td"},{href:"https://www.browserstack.com/test-on-the-right-mobile-devices"}),"https://www.browserstack.com/test-on-the-right-mobile-devices"))))),Object(r.b)("h2",{id:"queries"},"Queries:"),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"1. How to manage profile?")),Object(r.b)("p",null,"Ans: You need to find or generate a chrome profile folder. Then add the profile as a folder\n",Object(r.b)("inlineCode",{parentName:"p"},"add_argument | chromium option | ['--user-data-dir=path/to/profile/folder']")),Object(r.b)("p",null,"As of now, No support for Firefox/Safari browser profile"),Object(r.b)("p",null,"Find Chrome profile path here,\nFind the Profile Path:"),Object(r.b)("p",null,"Chrome profiles are typically stored in:"),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"Windows: ",Object(r.b)("inlineCode",{parentName:"li"},"C:\\Users\\Username\\AppData\\Local\\Google\\Chrome\\User Data\\<ProfileName>")),Object(r.b)("li",{parentName:"ul"},"macOS: ",Object(r.b)("inlineCode",{parentName:"li"},"/Users/Username/Library/Application Support/Google/Chrome/")),Object(r.b)("li",{parentName:"ul"},"Linux: ",Object(r.b)("inlineCode",{parentName:"li"},"/home/Username/.config/google-chrome/"))),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"2. How to add chrome extension (crx/unpacked_folder/encoded_extension)?")),Object(r.b)("p",null,"Ans: Extensions can be in 3 forms."),Object(r.b)("ol",null,Object(r.b)("li",{parentName:"ol"},Object(r.b)("p",{parentName:"li"},Object(r.b)("inlineCode",{parentName:"p"},"add_extension | chromium option | ['path/to/crx']")," For adding .crx extension file")),Object(r.b)("li",{parentName:"ol"},Object(r.b)("p",{parentName:"li"},Object(r.b)("inlineCode",{parentName:"p"},"add_argument | chromium option | ['load-extension=ext_dir1,ext_dir2']")," For adding extension as folder (unpacked)")),Object(r.b)("li",{parentName:"ol"},Object(r.b)("p",{parentName:"li"},Object(r.b)("inlineCode",{parentName:"p"},"add_encoded_extension | chromium option | ['string1', 'string2']")," For adding extension as encoded_string"))),Object(r.b)("p",null,"As of now, No support for Firefox/Safari browser extension"),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"3. How to test on mobile browsers?")),Object(r.b)("p",null,"Ans: Mobile browser can be selected from run or debug page. When android browser is selected we add and experimental_option ",Object(r.b)("inlineCode",{parentName:"p"},'{"mobileEmulation": {"deviceName": "Pixel 2 XL"}}')),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"4. Why and when to use go-to-link v2?")),Object(r.b)("p",null,"Ans: This action was designed to work as a plain selenium script with no complexity. Hence it does not have diversed capabilities like v1. When go-to-link-v1 has issues, v2 is used to investigate the issue."),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"5. How to connect to remote server, what is debuggerAddress?")),Object(r.b)("p",null,"Ans: "),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"In the remote machine, install chrome and launch with a flag ",Object(r.b)("inlineCode",{parentName:"li"},"google-chrome --remote-debugging-port=9222"),". Expose 9222 port from your VM config"),Object(r.b)("li",{parentName:"ul"},"In Node add an option ",Object(r.b)("inlineCode",{parentName:"li"},'debugger_address | chrome option | "your-vm-public-ip:9222"')," and remove default experimental_options ",Object(r.b)("inlineCode",{parentName:"li"},"add_experimental_option | chromium option | {}"))),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"6. How to handle popups (alert, corfirm, prompt)?"),"\nAns: These are js generated popups and can be handled by selenium. We have alert handle action for that purpose. Additionally, you can set a fixed behavior for all the prompts with a capability in Node\n",Object(r.b)("inlineCode",{parentName:"p"},'capabilities | shared capability | {"unhandledPromptBehavior": "dismiss/accept/ignore/alert"}')),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"dismiss: Automatically dismiss the prompt. This is useful if you want to avoid interruptions in your test flow."),Object(r.b)("li",{parentName:"ul"},"accept: Automatically accept the prompt. This can be used if the prompt is expected and you want to proceed without manual intervention."),Object(r.b)("li",{parentName:"ul"},"ignore: Ignore the prompt. The WebDriver will continue executing commands without attempting to handle the prompt."),Object(r.b)("li",{parentName:"ul"},"alert (for Chrome): Causes the WebDriver to raise an exception if a prompt appears and is not handled, allowing you to manage it programmatically.")),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"7. How to handle non-js browser prompts?")),Object(r.b)("p",null,"Ans: These are browser generated prompt and not from frontend js script. Selenium does not have the ability to modify them when they appear on the screen. You need to specify the values while launching browser. Browser prompts are mostly of 2 types:"),Object(r.b)("ol",null,Object(r.b)("li",{parentName:"ol"},"Permission Prompts:")),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"Examples: Notifications, Geolocation, Camera, Microphone."),Object(r.b)("li",{parentName:"ul"},"These prompts ask the user to allow or block access to specific browser features and show the website\u2019s icon."),Object(r.b)("li",{parentName:"ul"},Object(r.b)("inlineCode",{parentName:"li"},'add_experimental_option | chromium option | {"prefs": {"profile.default_content_setting_values.notifications": 2, "profile.default_content_setting_values.geolocation": 1}}')," Here, 1 = allow, 2 = Block"),Object(r.b)("li",{parentName:"ul"},Object(r.b)("inlineCode",{parentName:"li"},'add_argument | chromium option | ["--use-fake-ui-for-media-stream", "--use-fake-device-for-media-stream"]')," to bypass UI permission prompt and simulate a fake media device (fake camera or microphone) for testing purposes.")),Object(r.b)("ol",{start:2},Object(r.b)("li",{parentName:"ol"},"Authentication Dialogs:")),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"Example: Basic HTTP Authentication, where a browser prompts for a username and password to access a resource."),Object(r.b)("li",{parentName:"ul"},"Provide username and password in the url like this to bypass the browser prompt ",Object(r.b)("inlineCode",{parentName:"li"},"https://username:[email protected]"))),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"8. How to add proxy?")),Object(r.b)("p",null,"Ans: Launch the proxy server and expose the port"),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"In Chromium: ",Object(r.b)("inlineCode",{parentName:"li"},'add_argument | chrome option | ["--proxy-server=proxe-server-ip:port"]')),Object(r.b)("li",{parentName:"ul"},"In Firefox: ",Object(r.b)("inlineCode",{parentName:"li"},'set_preference | firefox option | {"network.proxy.type": 1, "network.proxy.http": "ip", "network.proxy.http_port": "port"}'))),Object(r.b)("h2",{id:"default-arguments-used-by-zeuz"},"Default arguments used by zeuz"),Object(r.b)("h3",{id:"all-browsers"},"All browsers"),Object(r.b)("pre",null,Object(r.b)("code",Object(o.a)({parentName:"pre"},{className:"language-json"}),'"capabilities": {}\n')),Object(r.b)("h3",{id:"chrome--edge"},"Chrome & Edge"),Object(r.b)("pre",null,Object(r.b)("code",Object(o.a)({parentName:"pre"},{className:"language-json"}),'{\n "add_argument": [\n "--ignore-certificate-errors",\n "--ignore-ssl-errors",\n "--zeuz_pid_finder",\n ],\n "add_experimental_option": {\n "prefs": {\n "download.default_directory": "download_dir",\n "download.prompt_for_download": false,\n }\n },\n "add_extension": [],\n "add_encoded_extension": [],\n}\n')),Object(r.b)("h3",{id:"firefox"},"Firefox"),Object(r.b)("pre",null,Object(r.b)("code",Object(o.a)({parentName:"pre"},{className:"language-json"}),'{\n "add_argument": [],\n "set_preference": {\n "browser.download.folderList": 2,\n "browser.download.manager.showWhenStarting": false,\n "browser.download.dir": "download_dir",\n "browser.helperApps.neverAsk.saveToDisk": "application/pdf;text/plain;application/text;text/xml;application/xml;application/xlsx;application/csv;application/zip",\n "browser.download.useDownloadDir": true,\n "browser.download.manager.closeWhenDone": true,\n "security.mixed_content.block_active_content": false,\n }\n}\n')),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"NOTE:")," What happens when I add my custom flags? The answer is the default values are removed and only the provided values are added as flags. So we do not appened with our default values."),Object(r.b)("h2",{id:"links"},"Links:"),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},Object(r.b)("a",Object(o.a)({parentName:"li"},{href:"https://developer.chrome.com/docs/chromedriver"}),"https://developer.chrome.com/docs/chromedriver")),Object(r.b)("li",{parentName:"ul"},Object(r.b)("a",Object(o.a)({parentName:"li"},{href:"https://www.selenium.dev/documentation"}),"https://www.selenium.dev/documentation")),Object(r.b)("li",{parentName:"ul"},Object(r.b)("a",Object(o.a)({parentName:"li"},{href:"https://www.selenium.dev/documentation/webdriver/drivers/options/"}),"https://www.selenium.dev/documentation/webdriver/drivers/options/"))))}b.isMDXComponent=!0},216:function(e,t,n){"use strict";n.d(t,"a",(function(){return c})),n.d(t,"b",(function(){return u}));var o=n(0),a=n.n(o);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function p(e,t){if(null==e)return{};var n,o,a=function(e,t){if(null==e)return{};var n,o,a={},r=Object.keys(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=a.a.createContext({}),b=function(e){var t=a.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=b(e.components);return a.a.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},m=a.a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,i=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),c=b(n),m=o,u=c["".concat(i,".").concat(m)]||c[m]||d[m]||r;return n?a.a.createElement(u,l(l({ref:t},s),{},{components:n})):a.a.createElement(u,l({ref:t},s))}));function u(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;s<r;s++)i[s]=n[s];return a.a.createElement.apply(null,i)}return a.a.createElement.apply(null,n)}m.displayName="MDXCreateElement"}}]);