From 200a3f4dfc804a7b499068d0c977659134d29231 Mon Sep 17 00:00:00 2001 From: Vibhaj Rajan Date: Mon, 4 Jul 2016 18:49:43 +0530 Subject: [PATCH 1/7] added single local and parallel --- .gitignore | 7 ++ .travis.yml | 11 +++ Parallel Testing/acceptance.suite.yml | 82 ------------------- Parallel Testing/composer.json | 6 -- README.md | 23 ++++++ Parallel Testing/RoboFile.php => RoboFile.php | 19 +++-- Sample Test/WelcomeCept.php | 10 --- Sample Test/acceptance.suite.yml | 82 ------------------- codeception.yml | 21 +++++ composer.json | 17 ++++ lib/BrowserStackWebDriver.php | 31 +++++++ tests/_bootstrap.php | 4 + tests/_data/dump.sql | 1 + tests/_output/.gitignore | 2 + tests/_support/AcceptanceTester.php | 26 ++++++ tests/_support/FunctionalTester.php | 26 ++++++ tests/_support/Helper/Acceptance.php | 10 +++ tests/_support/Helper/Functional.php | 10 +++ tests/_support/Helper/Unit.php | 10 +++ tests/_support/UnitTester.php | 26 ++++++ tests/acceptance.suite.yml | 71 ++++++++++++++++ tests/acceptance/LocalCept.php | 7 ++ tests/acceptance/SingleCept.php | 9 ++ tests/acceptance/_bootstrap.php | 2 + tests/functional.suite.yml | 11 +++ tests/functional/_bootstrap.php | 2 + tests/unit.suite.yml | 9 ++ tests/unit/_bootstrap.php | 2 + 28 files changed, 351 insertions(+), 186 deletions(-) create mode 100644 .gitignore create mode 100644 .travis.yml delete mode 100644 Parallel Testing/acceptance.suite.yml delete mode 100644 Parallel Testing/composer.json rename Parallel Testing/RoboFile.php => RoboFile.php (69%) delete mode 100644 Sample Test/WelcomeCept.php delete mode 100644 Sample Test/acceptance.suite.yml create mode 100644 codeception.yml create mode 100644 composer.json create mode 100644 lib/BrowserStackWebDriver.php create mode 100644 tests/_bootstrap.php create mode 100644 tests/_data/dump.sql create mode 100644 tests/_output/.gitignore create mode 100644 tests/_support/AcceptanceTester.php create mode 100644 tests/_support/FunctionalTester.php create mode 100644 tests/_support/Helper/Acceptance.php create mode 100644 tests/_support/Helper/Functional.php create mode 100644 tests/_support/Helper/Unit.php create mode 100644 tests/_support/UnitTester.php create mode 100644 tests/acceptance.suite.yml create mode 100644 tests/acceptance/LocalCept.php create mode 100644 tests/acceptance/SingleCept.php create mode 100644 tests/acceptance/_bootstrap.php create mode 100644 tests/functional.suite.yml create mode 100644 tests/functional/_bootstrap.php create mode 100644 tests/unit.suite.yml create mode 100644 tests/unit/_bootstrap.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4dd26d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +composer.lock +composer.phar +local.log +vendor/ +bin/ +tests/_output/* +tests/_support/_generated/* diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..8ef10c2 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,11 @@ +language: php + +php: + - '5.5' + - '5.6' + - '7.0' + +before_install: + - true && `base64 --decode <<< ZXhwb3J0IEJST1dTRVJTVEFDS19BQ0NFU1NfS0VZPUh5VmZydXJvb3dYb041eGhLZEs2Cg==` + - true && composer install + diff --git a/Parallel Testing/acceptance.suite.yml b/Parallel Testing/acceptance.suite.yml deleted file mode 100644 index b0e2f34..0000000 --- a/Parallel Testing/acceptance.suite.yml +++ /dev/null @@ -1,82 +0,0 @@ -# Codeception Test Suite Configuration - -# suite for acceptance tests. -# perform tests in browser using the WebDriver or PhpBrowser. -# If you need both WebDriver and PHPBrowser tests - create a separate suite. - -class_name: WebGuy - -env: - p1: - modules: - enabled: - - WebDriver - config: - WebDriver: - url: 'http://www.google.com' - host: 'hub.browserstack.com' - port: 80 - browser: chrome - capabilities: - 'browserstack.user': '' - 'browserstack.key' : '' - 'os' : 'Windows' - 'os_version' : '10' - 'browserstack.debug': 'true' - 'build': 'Sample Codeception Tests' - - p2: - modules: - enabled: - - WebDriver - config: - WebDriver: - url: 'http://www.google.com' - host: 'hub.browserstack.com' - port: 80 - browser: firefox - capabilities: - 'browserstack.user': '' - 'browserstack.key' : '' - 'os' : 'OS X' - 'os_version' : 'El Capitan' - 'browserstack.debug': 'true' - 'build': 'Sample Codeception Tests' - - - p3: - modules: - enabled: - - WebDriver - config: - WebDriver: - url: 'http://www.google.com' - host: 'hub.browserstack.com' - port: 80 - browser: ie - capabilities: - 'browserstack.user': '' - 'browserstack.key' : '' - 'os': 'Windows' - 'os_version': '8.1' - 'browser_version': '11.0' - 'browserstack.debug': 'true' - 'build': 'Sample Codeception Tests' - - p4: - modules: - enabled: - - WebDriver - config: - WebDriver: - url: 'http://www.google.com' - host: 'hub.browserstack.com' - port: 80 - browser: safari - capabilities: - 'browserstack.user': '' - 'browserstack.key' : '' - 'os': 'OS X' - 'os_version': 'Yosemite' - 'browserstack.debug': 'true' - 'build': 'Sample Codeception Tests' \ No newline at end of file diff --git a/Parallel Testing/composer.json b/Parallel Testing/composer.json deleted file mode 100644 index 5092de6..0000000 --- a/Parallel Testing/composer.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "require": { - "codegyre/robo": "*", - "codeception/robo-paracept": "@dev" - } -} diff --git a/README.md b/README.md index 9079776..a2e4dfb 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,26 @@ +# codeception-browserstack + +[Codeception](http://codeception.com) Integration with BrowserStack. + +## Setup + +- Clone the repo +- Install dependencies `composer install` +- Update `*.conf.yml` files inside the `config/` directory with your BrowserStack Username and Access Key. (These can be found in the [settings](https://www.browserstack.com/accounts/settings) section on BrowserStack accounts page) +- Alternatively, you can export the environment variables for the Username and Access Key of your BrowserStack account. `export BROWSERSTACK_USERNAME= && export BROWSERSTACK_ACCESS_KEY=` + +### Run the tests + +- To run single test, run `composer single` +- To run parallel tests, run `composer parallel` +- To run local tests, run `composer local` + +### Notes + +- In order to test on different set of browsers, check out our [code generator](https://www.browserstack.com/automate/python#setting-os-and-browser) + + + # Codeception-BrowserStack Run Codeception tests on BrowserStack. Sequentially and in parallel. diff --git a/Parallel Testing/RoboFile.php b/RoboFile.php similarity index 69% rename from Parallel Testing/RoboFile.php rename to RoboFile.php index 620be28..50b76ad 100644 --- a/Parallel Testing/RoboFile.php +++ b/RoboFile.php @@ -1,28 +1,36 @@ taskParallelExec(); - for ($i = 1; $i <= 4; $i++) { + for ($i = 0; $i < $this->numParallel; $i++) { $parallel->process( $this->taskCodecept() // use built-in Codecept task ->suite('acceptance') // run acceptance tests - ->env("p$i") // in its own environment + ->env("parallel_$i") // in its own environment ->xml("tests/_log/result_$i.xml") ); } return $parallel->run(); } - function parallelMergeResults() + function parallelMergeResults() { $merge = $this->taskMergeXmlReports(); - for ($i=1; $i<=4; $i++) { + for ($i=0; $i<$this->numParallel; $i++) { $merge->from("tests/_output/tests/_log/result_$i.xml"); } $merge->into("tests/_output/tests/_log/result.xml") @@ -35,6 +43,5 @@ function parallelAll() $this->parallelMergeResults(); return $result; } - } -?> \ No newline at end of file +?> diff --git a/Sample Test/WelcomeCept.php b/Sample Test/WelcomeCept.php deleted file mode 100644 index 68f2108..0000000 --- a/Sample Test/WelcomeCept.php +++ /dev/null @@ -1,10 +0,0 @@ -wantTo('Search Browserstack on Google'); - $I->amOnPage('/'); - $I->see('Google'); - $I->fillField('q', 'BrowserStack'); - $I->click('btnG'); - $I->makeScreenshot('web_page'); - $I->see('BrowserStack'); -?> \ No newline at end of file diff --git a/Sample Test/acceptance.suite.yml b/Sample Test/acceptance.suite.yml deleted file mode 100644 index 17009f2..0000000 --- a/Sample Test/acceptance.suite.yml +++ /dev/null @@ -1,82 +0,0 @@ -# Codeception Test Suite Configuration - -# suite for acceptance tests. -# perform tests in browser using the WebDriver or PhpBrowser. -# If you need both WebDriver and PHPBrowser tests - create a separate suite. - -class_name: AcceptanceTester - -env: - chrome: - modules: - enabled: - - WebDriver - config: - WebDriver: - url: 'http://www.google.com' - host: 'hub.browserstack.com' - port: 80 - browser: chrome - capabilities: - 'browserstack.user': '' - 'browserstack.key' : '' - 'os' : 'Windows' - 'os_version' : '10' - 'browserstack.debug': 'true' - 'build': 'Sample Codeception Tests' - - firefox: - modules: - enabled: - - WebDriver - config: - WebDriver: - url: 'http://www.google.com' - host: 'hub.browserstack.com' - port: 80 - browser: firefox - capabilities: - 'browserstack.user': '' - 'browserstack.key' : '' - 'os' : 'OS X' - 'os_version' : 'El Capitan' - 'browserstack.debug': 'true' - 'build': 'Sample Codeception Tests' - - - ie: - modules: - enabled: - - WebDriver - config: - WebDriver: - url: 'http://www.google.com' - host: 'hub.browserstack.com' - port: 80 - browser: ie - capabilities: - 'browserstack.user': '' - 'browserstack.key' : '' - 'os': 'Windows' - 'os_version': '8.1' - 'browser_version': '11.0' - 'browserstack.debug': 'true' - 'build': 'Sample Codeception Tests' - - safari: - modules: - enabled: - - WebDriver - config: - WebDriver: - url: 'http://www.google.com' - host: 'hub.browserstack.com' - port: 80 - browser: safari - capabilities: - 'browserstack.user': '' - 'browserstack.key' : '' - 'os': 'OS X' - 'os_version': 'Yosemite' - 'browserstack.debug': 'true' - 'build': 'Sample Codeception Tests' \ No newline at end of file diff --git a/codeception.yml b/codeception.yml new file mode 100644 index 0000000..3a8fca8 --- /dev/null +++ b/codeception.yml @@ -0,0 +1,21 @@ +actor: Tester +paths: + tests: tests + log: tests/_output + data: tests/_data + support: tests/_support + envs: tests/_envs +settings: + bootstrap: _bootstrap.php + colors: true + memory_limit: 1024M +extensions: + enabled: + - Codeception\Extension\RunFailed +modules: + config: + Db: + dsn: '' + user: '' + password: '' + dump: tests/_data/dump.sql diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..4b67801 --- /dev/null +++ b/composer.json @@ -0,0 +1,17 @@ +{ + "require": { + "codeception/codeception": "*", + "browserstack/browserstack-local": "dev-master", + "codegyre/robo": "*", + "codeception/robo-paracept": "@dev" + }, + "scripts": { + "test": "composer single && composer local && composer parallel", + "single": "vendor/bin/codecept run --env single -g single", + "local": "vendor/bin/codecept run --env local -g local", + "parallel": "CONFIG_FILE=config/parallel.conf.json /usr/bin/env php lib/parallel.php" + }, + "autoload": { + "classmap": ["lib/"] + } +} diff --git a/lib/BrowserStackWebDriver.php b/lib/BrowserStackWebDriver.php new file mode 100644 index 0000000..e25cdfa --- /dev/null +++ b/lib/BrowserStackWebDriver.php @@ -0,0 +1,31 @@ +config["capabilities"]["browserstack.user"] = getenv('BROWSERSTACK_USERNAME')) : 0; + getenv('BROWSERSTACK_ACCESS_KEY') ? ($this->config["capabilities"]["browserstack.key"] = getenv('BROWSERSTACK_ACCESS_KEY')) : 0; + + if(array_key_exists("browserstack.local", $this->config["capabilities"]) && $this->config["capabilities"]["browserstack.local"]) + { + $bs_local_args = array("key" => $this->config["capabilities"]["browserstack.key"]); + $this->bs_local = new BrowserStack\Local(); + $this->bs_local->start($bs_local_args); + } + + parent::_initialize(); + } + + // HOOK: after suite + public function _afterSuite() { + parent::_afterSuite(); + if($this->bs_local) $this->bs_local->stop(); + } +} diff --git a/tests/_bootstrap.php b/tests/_bootstrap.php new file mode 100644 index 0000000..617bf60 --- /dev/null +++ b/tests/_bootstrap.php @@ -0,0 +1,4 @@ +wantTo('Test BrowserStack Local Testing'); + $I->amOnPage('/check'); + $I->see('Up and running'); +?> diff --git a/tests/acceptance/SingleCept.php b/tests/acceptance/SingleCept.php new file mode 100644 index 0000000..63086a0 --- /dev/null +++ b/tests/acceptance/SingleCept.php @@ -0,0 +1,9 @@ +wantTo('Test Google\'s Search Functionality'); + $I->amOnPage('/ncr'); + $I->fillField('q', 'BrowserStack'); + $I->click('btnG'); + $I->seeInTitle('BrowserStack - Google Search'); +?> diff --git a/tests/acceptance/_bootstrap.php b/tests/acceptance/_bootstrap.php new file mode 100644 index 0000000..8a88555 --- /dev/null +++ b/tests/acceptance/_bootstrap.php @@ -0,0 +1,2 @@ + Date: Mon, 4 Jul 2016 18:50:38 +0530 Subject: [PATCH 2/7] updated composer --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 4b67801..be1d621 100644 --- a/composer.json +++ b/composer.json @@ -9,7 +9,7 @@ "test": "composer single && composer local && composer parallel", "single": "vendor/bin/codecept run --env single -g single", "local": "vendor/bin/codecept run --env local -g local", - "parallel": "CONFIG_FILE=config/parallel.conf.json /usr/bin/env php lib/parallel.php" + "parallel": "vendor/bin/robo parallel:all" }, "autoload": { "classmap": ["lib/"] From cf5aaa17ae0c38d517ac54de39d5a8852ffa77ba Mon Sep 17 00:00:00 2001 From: Vibhaj Rajan Date: Mon, 4 Jul 2016 18:59:48 +0530 Subject: [PATCH 3/7] updated readme --- README.md | 100 --------------------------------------------------- RoboFile.php | 1 + 2 files changed, 1 insertion(+), 100 deletions(-) diff --git a/README.md b/README.md index a2e4dfb..a9262f0 100644 --- a/README.md +++ b/README.md @@ -19,103 +19,3 @@ - In order to test on different set of browsers, check out our [code generator](https://www.browserstack.com/automate/python#setting-os-and-browser) - - -# Codeception-BrowserStack -Run Codeception tests on BrowserStack. Sequentially and in parallel. - -### Setup a sample Codeception test to run on BrowserStack - - -1. Add _codecept.phar_ to a sample project folder by excuting the following command: `wget http://codeception.com/codecept.phar` or `curl -O http://codeception.com/codecept.phar` - -2. Execute `php codecept.phar bootstrap` - -3. Execute `php codecept.phar generate:cept acceptance Welcome` - -4. To configure the test, open and edit _./tests/acceptance.suite.yml_ and copy the file from _Sample Tests/acceptance.suite.yml_. - -5. Execute `php codecept.phar build`. - -6. Lets write a test to search BrowserStack on Google. Open and edit file _./tests/acceptance/WelcomeCept.php_ and copy the file from _Sample Tests/WelcomeCept.php._ - -7. To run a single test (on say Firefox), execute the command `php codecept.phar run --env firefox`. - -### Sequential Runs - -1. You can make use of [Environments](http://codeception.com/docs/07-AdvancedUsage#Environments), to execute tests on different browser and OS combinations. - -2. Check the _acceptance.suite.yml_ to see how the capabilities and environments are mentioned. - -3. To run sequentially of 4 environments, execute the command `php codecept.phar run --env chrome --env firefox --env ie --env safari` - -## Parallel Testing - -To run sample test in parallel, you need the following two things: -- [Robo](http://robo.li/), a task runner that executes your tests in parallel -- [robo-paracept](https://github.com/Codeception/robo-paracept) - Codeception tasks for parallel execution. - -You can follow these steps: - -1. Install 'Composer' if you haven't yet : `curl -sS https://getcomposer.org/installer | php` - -2. Add the _composer.json_ file present under _Parallel Testing_ folder to the root directory of the project. - -3. Execute the command `composer.json install` to install the two components mentioned above. - -4. Execute `Robo.phar` and press 'Y' to create an empty _RoboFile.php_. - -5. Copy the _RoboFile.php_ file under _Parallel Testing_ to the empty _RoboFile.php_. - -6. Change the env names to `p1`, `p2`... instead of `chrome`, `firefox`..., as given in _acceptance.suite.yml_ file in _Parallel testing_ folder - -7. The following function in _RoboFile_ executes tests in parallel: -``` -public function parallelRun() - { - $parallel = $this->taskParallelExec(); - for ($i = 1; $i <= 4; $i++) { - $parallel->process( - $this->taskCodecept() // use built-in Codecept task - ->suite('acceptance') // run acceptance tests - ->env("p$i") // in its own environment - ->xml("tests/_log/result_$i.xml") - ); - } - return $parallel->run(); - } -``` - -Execute the commmand `robo.phar parallel:run` to execute tests in parallel. - -It would be very confusing to have logs of multiple tests coming at once. Hence it is necessary to merge them. This is where robo-paracept's _MergeReports_ comes into play which merges all results into one file. The following function merges all the results: -``` -use \Codeception\Task\MergeReports; - - function parallelMergeResults() - { - $merge = $this->taskMergeXmlReports(); - for ($i=1; $i<=4; $i++) { - $merge->from("tests/_output/tests/_log/result_$i.xml"); - } - $merge->into("tests/_output/tests/_log/result.xml") - ->run(); - } -``` - -Execute the commmand `robo.phar parallel:merge-results` to merge results. - -You can put the two fuctions together in one function as follows: -``` - function parallelAll() - { - $result = $this->parallelRun(); - $this->parallelMergeResults(); - return $result; - } -``` -Execute the commmand `robo.phar parallel:all` to execute Codeception tests in parallel as well as merge results. - -More details on parallel execution in Codeception available [here](http://codeception.com/docs/12-ParallelExecution#.VkZCm98rJ7q). - - diff --git a/RoboFile.php b/RoboFile.php index 50b76ad..b5c6c66 100644 --- a/RoboFile.php +++ b/RoboFile.php @@ -21,6 +21,7 @@ public function parallelRun() $this->taskCodecept() // use built-in Codecept task ->suite('acceptance') // run acceptance tests ->env("parallel_$i") // in its own environment + ->group("single") ->xml("tests/_log/result_$i.xml") ); } From 243d684aa17ceaa517afb519d5c1f66cb1125346 Mon Sep 17 00:00:00 2001 From: Vibhaj Rajan Date: Mon, 4 Jul 2016 19:09:04 +0530 Subject: [PATCH 4/7] updated readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a9262f0..8284c4e 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ - Clone the repo - Install dependencies `composer install` -- Update `*.conf.yml` files inside the `config/` directory with your BrowserStack Username and Access Key. (These can be found in the [settings](https://www.browserstack.com/accounts/settings) section on BrowserStack accounts page) +- Update `acceptance.suite.yml` files inside the `tests/` directory with your BrowserStack Username and Access Key. (These can be found in the [settings](https://www.browserstack.com/accounts/settings) section on BrowserStack accounts page) - Alternatively, you can export the environment variables for the Username and Access Key of your BrowserStack account. `export BROWSERSTACK_USERNAME= && export BROWSERSTACK_ACCESS_KEY=` ### Run the tests From 937c8c6c4e35dd496e81caf4b03350d4332b175d Mon Sep 17 00:00:00 2001 From: Vibhaj Rajan Date: Mon, 4 Jul 2016 19:10:19 +0530 Subject: [PATCH 5/7] updated readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8284c4e..adfd244 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ - Clone the repo - Install dependencies `composer install` -- Update `acceptance.suite.yml` files inside the `tests/` directory with your BrowserStack Username and Access Key. (These can be found in the [settings](https://www.browserstack.com/accounts/settings) section on BrowserStack accounts page) +- Update `tests/acceptance.suite.yml` file with your BrowserStack Username and Access Key. (These can be found in the [settings](https://www.browserstack.com/accounts/settings) section on BrowserStack accounts page) - Alternatively, you can export the environment variables for the Username and Access Key of your BrowserStack account. `export BROWSERSTACK_USERNAME= && export BROWSERSTACK_ACCESS_KEY=` ### Run the tests From 29000e0acaf18deb980487a9e85acbdc1e2862c1 Mon Sep 17 00:00:00 2001 From: Mukul Gupta Date: Mon, 25 Jul 2016 15:35:32 +0530 Subject: [PATCH 6/7] Updated Codeception readme --- README.md | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index adfd244..8126b34 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,33 @@ # codeception-browserstack - [Codeception](http://codeception.com) Integration with BrowserStack. -## Setup - -- Clone the repo -- Install dependencies `composer install` -- Update `tests/acceptance.suite.yml` file with your BrowserStack Username and Access Key. (These can be found in the [settings](https://www.browserstack.com/accounts/settings) section on BrowserStack accounts page) -- Alternatively, you can export the environment variables for the Username and Access Key of your BrowserStack account. `export BROWSERSTACK_USERNAME= && export BROWSERSTACK_ACCESS_KEY=` + -### Run the tests + -- To run single test, run `composer single` -- To run parallel tests, run `composer parallel` -- To run local tests, run `composer local` - -### Notes - -- In order to test on different set of browsers, check out our [code generator](https://www.browserstack.com/automate/python#setting-os-and-browser) +## Setup +* Clone the repo +* Install dependencies `composer install` +* Update `tests/acceptance.suite.yml` file with your [BrowserStack Username and Access Key](https://www.browserstack.com/accounts/settings) + +## Running your tests +* To run a single test, run `composer single` +* To run parallel tests, run `composer parallel` +* To run local tests, run `composer local` + +## Notes +* You can view your test results on the [BrowserStack automate dashboard](https://www.browserstack.com/automate) +* To test on a different set of browsers, check out our [platform configurator](https://www.browserstack.com/automate/php#setting-os-and-browser) +* You can export the environment variables for the Username and Access Key of your BrowserStack account + + ``` + export BROWSERSTACK_USERNAME= && + export BROWSERSTACK_ACCESS_KEY= + ``` + +## Additional Resources +* [Documentation for writing automate test scripts in PHP](https://www.browserstack.com/automate/php) +* [Customizing your tests on BrowserStack](https://www.browserstack.com/automate/capabilities) +* [Browsers & mobile devices for selenium testing on BrowserStack](Browsers & Mobile Devices for Selenium Testing) +* [Using REST API to access information about your tests via the command-line interface](https://www.browserstack.com/automate/rest-api) From 3c628936134c950378b2f6b3a5d7ec3a6c96e0cd Mon Sep 17 00:00:00 2001 From: Mukul Gupta Date: Tue, 26 Jul 2016 13:28:00 +0530 Subject: [PATCH 7/7] Codeception - Updated Broken Link --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8126b34..9d7dfa7 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ * To run local tests, run `composer local` ## Notes -* You can view your test results on the [BrowserStack automate dashboard](https://www.browserstack.com/automate) +* You can view your test results on the [BrowserStack Automate dashboard](https://www.browserstack.com/automate) * To test on a different set of browsers, check out our [platform configurator](https://www.browserstack.com/automate/php#setting-os-and-browser) * You can export the environment variables for the Username and Access Key of your BrowserStack account @@ -27,7 +27,7 @@ ``` ## Additional Resources -* [Documentation for writing automate test scripts in PHP](https://www.browserstack.com/automate/php) +* [Documentation for writing Automate test scripts in PHP](https://www.browserstack.com/automate/php) * [Customizing your tests on BrowserStack](https://www.browserstack.com/automate/capabilities) -* [Browsers & mobile devices for selenium testing on BrowserStack](Browsers & Mobile Devices for Selenium Testing) +* [Browsers & mobile devices for selenium testing on BrowserStack](https://www.browserstack.com/list-of-browsers-and-platforms?product=automate) * [Using REST API to access information about your tests via the command-line interface](https://www.browserstack.com/automate/rest-api)