{"id":2574,"date":"2016-09-12T08:00:00","date_gmt":"2016-09-12T07:00:00","guid":{"rendered":"http:\/\/www.diogonunes.com\/blog\/?p=2574"},"modified":"2020-05-15T14:23:23","modified_gmt":"2020-05-15T13:23:23","slug":"how-to-use-browserstack-cross-browser-testing","status":"publish","type":"post","link":"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/","title":{"rendered":"Testing for cross-browser compatibility using BrowserStack"},"content":{"rendered":"<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/08\/6-Useful-Cross-Browser-Testing-Tools.png?resize=580%2C208\" alt=\"6-Useful-Cross-Browser-Testing-Tools\" width=\"580\" height=\"208\" class=\"aligncenter size-full wp-image-2647\" srcset=\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/08\/6-Useful-Cross-Browser-Testing-Tools.png?w=956&amp;ssl=1 956w, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/08\/6-Useful-Cross-Browser-Testing-Tools.png?resize=400%2C144&amp;ssl=1 400w, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/08\/6-Useful-Cross-Browser-Testing-Tools.png?resize=768%2C276&amp;ssl=1 768w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/p>\n<h2>Learn how to do it with this example<\/h2>\n<p><!--more--><\/p>\n<p>Recalling my <a href=\"http:\/\/diogonunes.com\/blog\/browserstack-cross-browser-testing-review\">BrowserStack review<\/a>, their main tools are:<\/p>\n<ul>\n<li><strong>Automate<\/strong>: Where you run your automated Selenium tests and check the results.<\/li>\n<li><strong>Screenshots<\/strong>: Paste an URL, select the browsers and version you want, and in a few minutes you get a batch of screenshots.<\/li>\n<li><strong>Live<\/strong>: by connecting to their data center you are able to do exploratory testing of your web app on the environment you need without having to worry about virtual machines.<\/li>\n<\/ul>\n<p>Note that <strong>BrowserStack Automate tells you if a test has completed, not that it passed<\/strong>. For me <a href=\"http:\/\/diogonunes.com\/blog\/browserstack-cross-browser-testing-review\">that&#8217;s just weird<\/a>. So when a test fails locally it doesn&#8217;t (necessarily) fail remotely. I explicitly created an assert that would always fails like <code>assertThat(true, is(false))<\/code> and it would fail locally and <del>pass<\/del> complete on BrowserStack. I had to use that <a href=\"http:\/\/stackoverflow.com\/a\/35102092\/675577\">API workaround to mark tests as failed<\/a> you will se below.<\/p>\n<p>Here is the code I used to integrate my local Selenium tests with BrowserStack&#8217;s Automate service. Their <a href=\"https:\/\/www.browserstack.com\/automate\/java#getting-started\">documentation<\/a> and customer support helped me achieve it.<\/p>\n<pre><code>public class EndToEndBrowserStackTests {\n\n    private static WebDriver driver;\n    private static String targetDriver;\n    private static String targetRootUrl;\n    private static URL browserStackAPI;\n\n    \/\/ When a test fails, you need to explicitly mark it as failed on BrowserStack... #fail\n    @Rule\n    public TestRule testWatcher = new TestWatcher() {\n        @Override\n        public void failed(Throwable t, Description test) {\n            \/\/ Take screenshot\n            try {\n                File screenshotFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);\n                FileUtils.copyFile(screenshotFile, new File(SCREENSHOTS_DIR + test.getMethodName() + \".png\"));\n            } catch (Exception e) {\n                e.printStackTrace();\n            }\n\n            if (driver instanceof RemoteWebDriver) {\n                failRemoteTest(\"Failed test at \" + test.getMethodName() + \" because '\" + t.getMessage().replace('\\n', ' ') + \"'\");\n            }\n        }\n    };\n\n    @BeforeClass\n    public static void init() throws Exception {\n        \/\/ Use system env variables for CI environments or constants if your testing manually on your IDE\n        String browserStackUser = System.getenv(\"BROWSERSTACK_USER\");\n        String browserStackKey = System.getenv(\"BROWSERSTACK_ACCESSKEY\");\n        browserStackAPI = new URL(\"https:\/\/\" + browserStackUser + \":\" + browserStackKey + \"@hub-cloud.browserstack.com\/wd\/hub\");\n\n        targetRootUrl = \"http:\/\/your-url-under-test.com\/\"; \/\/ either local or remote\n        targetDriver = System.getenv(\"BROWSER_NAME\");\n    }\n\n    @Test\n    public void checkForNavigationLinks() {\n        try {\n            driver = getDriver();\n            driver.navigate().to(targetRootUrl);\n            WebDriverWait driverWait = new WebDriverWait(driver, 5);  \/\/ seconds\n            driverWait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(\"div.navigation\")));\n\n            NavigationHeader navHeader = new NavigationHeader(driver);\n            assertThat(\"Header links should be visible\", navHeader.isDashboardLinkVisible(), is(true));\n\n            NavigationMenu navMenu = new NavigationMenu(driver);\n            assertThat(\"Menu links should be visible\", navMenu.isLoginLinkVisible(), is(true));\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n\n    @After\n    public void tearDown() {\n        if (driver != null) {\n            driver.quit();\n        }\n    }\n\n    private static WebDriver getDriver() throws Exception {\n        DesiredCapabilities caps = new DesiredCapabilities();\n        caps.setCapability(\"os\", \"Windows\");\n        caps.setCapability(\"os_version\", \"10\");\n        caps.setCapability(\"resolution\", \"1024x768\");\n        caps.setCapability(\"browserstack.debug\", \"true\");\n        caps.setCapability(\"browserstack.video\", \"false\");\n        caps.setCapability(\"browserstack.local\", System.getenv(\"BROWSERSTACK_LOCAL\");\n        caps.setCapability(\"browserstack.localIdentifier\", System.getenv(\"BROWSERSTACK_LOCAL_IDENTIFIER\");\n        caps.setCapability(\"project\", \"Your Project's Name\");   \/\/TODO: the name of your project\n        caps.setCapability(\"build\", \"\");                        \/\/TODO: leave empty if you don't want the results to be grouped by build\n\n        switch (targetDriver.toLowerCase()) {\n            case \"chrome\":\n                caps.setCapability(\"browser\", \"Chrome\");\n                caps.setCapability(\"browser_version\", \"50.0\");\n                break;\n            case \"ie\": case \"internetexplorer\":\n                caps.setCapability(\"browser\", \"IE\");\n                caps.setCapability(\"browser_version\", \"11.0\");\n            case \"ff\": case \"firefox\":\n                caps.setCapability(\"browser\", \"Firefox\");\n                caps.setCapability(\"browser_version\", \"46.0\");\n            case \"\": case \"phantom\":\n            default:\n                return new PhantomJSDriver();\n        }\n        return new RemoteWebDriver(browserStackAPI, caps);\n    }\n\n    private void failRemoteTest(String errorReason) {\n        try {\n            String remoteSessionId = ((RemoteWebDriver) driver).getSessionId().toString();\n            String encodedAuthString = \"\"; \/\/ TODO: Find out which one is yours, it should be a base64 string\n            URL url = new URL(\"https:\/\/www.browserstack.com\/automate\/sessions\/\" + remoteSessionId + \".json\");\n            HttpURLConnection connection = (HttpURLConnection) url.openConnection();\n\n            connection.setDoInput(true);\n            connection.setDoOutput(true);\n            connection.setRequestMethod(\"PUT\");\n            connection.setRequestProperty(\"Accept\", \"application\/json\");\n            connection.setRequestProperty(\"Content-Type\", \"application\/json; charset=UTF-8\");\n            connection.setRequestProperty(\"Authorization\", \"Basic \" + encodedAuthString);\n\n            String payload = \"{\\\"status\\\":\\\"error\\\", \\\"reason\\\":\\\"\" + errorReason + \"\\\"}\";\n            OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream(), \"UTF-8\");\n            writer.write(payload);\n            writer.close();\n\n            if (connection.getResponseCode() != 200)\n                throw new Exception(\"Failed to change remote test state.\");\n            else\n                connection.disconnect();\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n}\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Learn how to do it with this example<\/p>\n","protected":false},"author":1,"featured_media":2647,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[2],"tags":[29,56,57,55],"class_list":["post-2574","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech","tag-coding","tag-java","tag-selenium","tag-testing"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Testing for cross-browser compatibility using BrowserStack - The Geeky Gecko<\/title>\n<meta name=\"description\" content=\"Here&#039;s the code I used to integrate my local Selenium tests with BrowserStack&#039;s Automate. Their documentation and customer support helped me achieve it.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Testing for cross-browser compatibility using BrowserStack - The Geeky Gecko\" \/>\n<meta property=\"og:description\" content=\"Here&#039;s the code I used to integrate my local Selenium tests with BrowserStack&#039;s Automate. Their documentation and customer support helped me achieve it.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/\" \/>\n<meta property=\"og:site_name\" content=\"The Geeky Gecko\" \/>\n<meta property=\"article:published_time\" content=\"2016-09-12T07:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-05-15T13:23:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/08\/6-Useful-Cross-Browser-Testing-Tools.png?fit=956%2C343&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"956\" \/>\n\t<meta property=\"og:image:height\" content=\"343\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Diogo Nunes\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dialexnunes\" \/>\n<meta name=\"twitter:site\" content=\"@dialexnunes\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Diogo Nunes\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/\"},\"author\":{\"name\":\"Diogo Nunes\",\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c\"},\"headline\":\"Testing for cross-browser compatibility using BrowserStack\",\"datePublished\":\"2016-09-12T07:00:00+00:00\",\"dateModified\":\"2020-05-15T13:23:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/\"},\"wordCount\":181,\"publisher\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c\"},\"image\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/08\/6-Useful-Cross-Browser-Testing-Tools.png?fit=956%2C343&ssl=1\",\"keywords\":[\"coding\",\"java\",\"selenium\",\"testing\"],\"articleSection\":[\"Technology\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/\",\"url\":\"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/\",\"name\":\"Testing for cross-browser compatibility using BrowserStack - The Geeky Gecko\",\"isPartOf\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/08\/6-Useful-Cross-Browser-Testing-Tools.png?fit=956%2C343&ssl=1\",\"datePublished\":\"2016-09-12T07:00:00+00:00\",\"dateModified\":\"2020-05-15T13:23:23+00:00\",\"description\":\"Here's the code I used to integrate my local Selenium tests with BrowserStack's Automate. Their documentation and customer support helped me achieve it.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/#primaryimage\",\"url\":\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/08\/6-Useful-Cross-Browser-Testing-Tools.png?fit=956%2C343&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/08\/6-Useful-Cross-Browser-Testing-Tools.png?fit=956%2C343&ssl=1\",\"width\":956,\"height\":343},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.diogonunes.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Testing for cross-browser compatibility using BrowserStack\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#website\",\"url\":\"https:\/\/www.diogonunes.com\/blog\/\",\"name\":\"The Geeky Gecko\",\"description\":\"The Geeky Gecko\",\"publisher\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.diogonunes.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c\",\"name\":\"Diogo Nunes\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2026\/04\/Geeky-Gecko-2026-v2.png?fit=799%2C799&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2026\/04\/Geeky-Gecko-2026-v2.png?fit=799%2C799&ssl=1\",\"width\":799,\"height\":799,\"caption\":\"Diogo Nunes\"},\"logo\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/image\/\"},\"sameAs\":[\"http:\/\/www.diogonunes.com\",\"https:\/\/x.com\/dialexnunes\"],\"url\":\"https:\/\/www.diogonunes.com\/blog\/author\/diogo-nunes\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Testing for cross-browser compatibility using BrowserStack - The Geeky Gecko","description":"Here's the code I used to integrate my local Selenium tests with BrowserStack's Automate. Their documentation and customer support helped me achieve it.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/","og_locale":"en_US","og_type":"article","og_title":"Testing for cross-browser compatibility using BrowserStack - The Geeky Gecko","og_description":"Here's the code I used to integrate my local Selenium tests with BrowserStack's Automate. Their documentation and customer support helped me achieve it.","og_url":"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/","og_site_name":"The Geeky Gecko","article_published_time":"2016-09-12T07:00:00+00:00","article_modified_time":"2020-05-15T13:23:23+00:00","og_image":[{"width":956,"height":343,"url":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/08\/6-Useful-Cross-Browser-Testing-Tools.png?fit=956%2C343&ssl=1","type":"image\/png"}],"author":"Diogo Nunes","twitter_card":"summary_large_image","twitter_creator":"@dialexnunes","twitter_site":"@dialexnunes","twitter_misc":{"Written by":"Diogo Nunes","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/#article","isPartOf":{"@id":"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/"},"author":{"name":"Diogo Nunes","@id":"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c"},"headline":"Testing for cross-browser compatibility using BrowserStack","datePublished":"2016-09-12T07:00:00+00:00","dateModified":"2020-05-15T13:23:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/"},"wordCount":181,"publisher":{"@id":"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c"},"image":{"@id":"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/08\/6-Useful-Cross-Browser-Testing-Tools.png?fit=956%2C343&ssl=1","keywords":["coding","java","selenium","testing"],"articleSection":["Technology"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/","url":"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/","name":"Testing for cross-browser compatibility using BrowserStack - The Geeky Gecko","isPartOf":{"@id":"https:\/\/www.diogonunes.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/#primaryimage"},"image":{"@id":"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/08\/6-Useful-Cross-Browser-Testing-Tools.png?fit=956%2C343&ssl=1","datePublished":"2016-09-12T07:00:00+00:00","dateModified":"2020-05-15T13:23:23+00:00","description":"Here's the code I used to integrate my local Selenium tests with BrowserStack's Automate. Their documentation and customer support helped me achieve it.","breadcrumb":{"@id":"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/#primaryimage","url":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/08\/6-Useful-Cross-Browser-Testing-Tools.png?fit=956%2C343&ssl=1","contentUrl":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/08\/6-Useful-Cross-Browser-Testing-Tools.png?fit=956%2C343&ssl=1","width":956,"height":343},{"@type":"BreadcrumbList","@id":"https:\/\/www.diogonunes.com\/blog\/how-to-use-browserstack-cross-browser-testing\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.diogonunes.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Testing for cross-browser compatibility using BrowserStack"}]},{"@type":"WebSite","@id":"https:\/\/www.diogonunes.com\/blog\/#website","url":"https:\/\/www.diogonunes.com\/blog\/","name":"The Geeky Gecko","description":"The Geeky Gecko","publisher":{"@id":"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.diogonunes.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c","name":"Diogo Nunes","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2026\/04\/Geeky-Gecko-2026-v2.png?fit=799%2C799&ssl=1","contentUrl":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2026\/04\/Geeky-Gecko-2026-v2.png?fit=799%2C799&ssl=1","width":799,"height":799,"caption":"Diogo Nunes"},"logo":{"@id":"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/image\/"},"sameAs":["http:\/\/www.diogonunes.com","https:\/\/x.com\/dialexnunes"],"url":"https:\/\/www.diogonunes.com\/blog\/author\/diogo-nunes\/"}]}},"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/08\/6-Useful-Cross-Browser-Testing-Tools.png?fit=956%2C343&ssl=1","jetpack-related-posts":[{"id":2650,"url":"https:\/\/www.diogonunes.com\/blog\/browserstack-cross-browser-testing-review\/","url_meta":{"origin":2574,"position":0},"title":"Cross-browser testing with BrowserStack: a review","author":"Diogo Nunes","date":"15 August, 2016","format":false,"excerpt":"These are BrowserStack's main services or tools: Automate: Where you run your automated Selenium tests and check the results. Screenshots: Paste an URL, select the browsers and version you want, and in a few minutes you get a batch of screenshots. Live: by connecting to their data center you are\u2026","rel":"","context":"In &quot;Technology&quot;","block_context":{"text":"Technology","link":"https:\/\/www.diogonunes.com\/blog\/category\/tech\/"},"img":{"alt_text":"browserstack-logo","src":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/07\/browserstack-logo.png?fit=1024%2C337&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/07\/browserstack-logo.png?fit=1024%2C337&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/07\/browserstack-logo.png?fit=1024%2C337&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/07\/browserstack-logo.png?fit=1024%2C337&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":2566,"url":"https:\/\/www.diogonunes.com\/blog\/cross-browser-testing-tuttu-testing-through-ui\/","url_meta":{"origin":2574,"position":1},"title":"Before doing cross-browser testing ask yourself: are you TuTTu?","author":"Diogo Nunes","date":"18 July, 2016","format":false,"excerpt":"Recently I had the requirement to test the behavior of a web application on Chrome, Firefox... and the dreaded Internet Explorer. The team already had automated end-to-end test written in Java using Selenium web driver. We decided to explore the world of automated cross-browser testing and we were recommended BrowserStack\u2026","rel":"","context":"In &quot;Work&quot;","block_context":{"text":"Work","link":"https:\/\/www.diogonunes.com\/blog\/category\/work\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/07\/cross-browser-header.png?fit=1200%2C646&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/07\/cross-browser-header.png?fit=1200%2C646&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/07\/cross-browser-header.png?fit=1200%2C646&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/07\/cross-browser-header.png?fit=1200%2C646&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/07\/cross-browser-header.png?fit=1200%2C646&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":4204,"url":"https:\/\/www.diogonunes.com\/blog\/framework-review-playwright\/","url_meta":{"origin":2574,"position":2},"title":"Framework review: Playwright","author":"Diogo Nunes","date":"29 March, 2021","format":false,"excerpt":"Playwright enables end-to-end testing. Test modern single page apps, across all modern browsers, using in your preferred language (JS, TS, Java, C#, Python). \u2014 Official website Code Example of automation at GitHub. Use cases \ud83e\udd48 Automate end-to-end (E2E) tests using the UI. It also supports mocks. Learning curve \ud83e\udd48 Most\u2026","rel":"","context":"In &quot;Technology&quot;","block_context":{"text":"Technology","link":"https:\/\/www.diogonunes.com\/blog\/category\/tech\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/03\/fatih-kilic-m1dM7ZXvdMs-unsplash.jpg?fit=1200%2C773&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/03\/fatih-kilic-m1dM7ZXvdMs-unsplash.jpg?fit=1200%2C773&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/03\/fatih-kilic-m1dM7ZXvdMs-unsplash.jpg?fit=1200%2C773&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/03\/fatih-kilic-m1dM7ZXvdMs-unsplash.jpg?fit=1200%2C773&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/03\/fatih-kilic-m1dM7ZXvdMs-unsplash.jpg?fit=1200%2C773&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":3955,"url":"https:\/\/www.diogonunes.com\/blog\/framework-review-karate\/","url_meta":{"origin":2574,"position":3},"title":"Framework review: Karate","author":"Diogo Nunes","date":"2 November, 2020","format":false,"excerpt":"Karate is the only open-source tool to combine API test-automation, mocks, performance-testing and even UI automation into a single, unified framework. You don't have to compile (Java) code. Just write tests in a readable syntax. \u2014 Official website Code Example of automation at GitHub. Use cases \ud83e\udd47 Automate API tests.\u2026","rel":"","context":"In &quot;Technology&quot;","block_context":{"text":"Technology","link":"https:\/\/www.diogonunes.com\/blog\/category\/tech\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/08\/thao-le-hoang-igLzPKOvZNw-unsplash-scaled.jpg?fit=1200%2C798&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/08\/thao-le-hoang-igLzPKOvZNw-unsplash-scaled.jpg?fit=1200%2C798&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/08\/thao-le-hoang-igLzPKOvZNw-unsplash-scaled.jpg?fit=1200%2C798&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/08\/thao-le-hoang-igLzPKOvZNw-unsplash-scaled.jpg?fit=1200%2C798&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/08\/thao-le-hoang-igLzPKOvZNw-unsplash-scaled.jpg?fit=1200%2C798&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":4240,"url":"https:\/\/www.diogonunes.com\/blog\/5-years-5-tricks-tester\/","url_meta":{"origin":2574,"position":4},"title":"5 tricks from 5 years as a software tester","author":"Diogo Nunes","date":"26 July, 2021","format":false,"excerpt":"And how you can use them in your team \ud83c\udfc6 This post was featured on Coding Jag #47, Software Testing Notes #19, Trending in Testing #5, Testing Bits #403 and TestSigma #28. I've worked for seven companies since I became a tester five years ago. Each team is different, the\u2026","rel":"","context":"In &quot;Work&quot;","block_context":{"text":"Work","link":"https:\/\/www.diogonunes.com\/blog\/category\/work\/"},"img":{"alt_text":"cake","src":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/07\/warm-oven-MVFdtUDEJHk-unsplash.jpg?fit=1200%2C800&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/07\/warm-oven-MVFdtUDEJHk-unsplash.jpg?fit=1200%2C800&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/07\/warm-oven-MVFdtUDEJHk-unsplash.jpg?fit=1200%2C800&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/07\/warm-oven-MVFdtUDEJHk-unsplash.jpg?fit=1200%2C800&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/07\/warm-oven-MVFdtUDEJHk-unsplash.jpg?fit=1200%2C800&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":2497,"url":"https:\/\/www.diogonunes.com\/blog\/testing-for-agile-teams-summary\/","url_meta":{"origin":2574,"position":5},"title":"Testing for agile teams: Summary","author":"Diogo Nunes","date":"1 August, 2016","format":false,"excerpt":"This post is part of the \"Testing for Agile Teams\" series. Incrementally delivering business value, through short iterations (SCRUM) and virtuous loops of feedback (XP). Roles' boundaries are blurred, everyone's focused on quality. Testers help customers clarify requirements, turn those into tests that guide development, and provide a holistic viewpoint\u2026","rel":"","context":"In &quot;Work&quot;","block_context":{"text":"Work","link":"https:\/\/www.diogonunes.com\/blog\/category\/work\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/03\/Agile-Testing-Book.jpg?fit=489%2C340&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/posts\/2574","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/comments?post=2574"}],"version-history":[{"count":1,"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/posts\/2574\/revisions"}],"predecessor-version":[{"id":3793,"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/posts\/2574\/revisions\/3793"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/media\/2647"}],"wp:attachment":[{"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/media?parent=2574"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/categories?post=2574"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/tags?post=2574"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}