===Profile Information
**Name**: Bello Gbadebo
**Email**: gbahdeybohbello@gmail.com
**IRC nick**: Gbahdeyboh
**Resume**: [Download Resume](https://res.cloudinary.com/gbahdeyboh/image/upload/v1582899872/Gbadebo_Bello_CV_G_wndlzb.pdf)
**Location**: Lagos, Nigeria
**Typical working hours**: Between 6pm and 2am WAT(UTC+01:00)
===Synopsis
- Short summary describing your project and how it will benefit Wikimedia projectsWikimedia has a couple of projects which are being tested from time to time either via Jenkins or as a part of Continuous Integration on each check-in to Gerrit, some of this tests are completely automated using a browser automation framework, WikiMedia currently uses a test automation framework built atop of WebdriverIO and selenium for their testing their repositories. WebdriverIO allows you to run tests based on web driver protocols. While this is a great tool, there are useful alternatives which provide certain features that either WebdriverIO does not have at all, or has a less efficient implementation of which are also easier to set up and work with.
Wikimedia currently uses a test automation framework built atop of WebdriverIOThis, therefore, makes it important to consider switching to other alternatives. Currently, there are two most probable alternatives that could be switched to which are Puppeteer and Cypress.
Puppeteer is a high-level browser automation API built atop Chrome DevTools Protocols while Cypress is a Front end End to End testing framework.
{F31708123}
The chart above shows a comparison between the usage of Puppeteer, Cypress, and WebdriverIO. This chart automatically shows us that Puppeteer and Cypress are good alternatives for WebdriverIO.
I aim to extensively evaluate the usage of both Puppeteer and Cypress by deeply Integrating both of them with some of Wikimedia's repositories. The evaluation process would take into consideration several factors that would help determine which is the best alternative for WebdriverIO and how much work would be required to switch all repositories to the selected tool.
This proposal proposes the use of puppeteer, a high-level browser automation API built atop Chrome DevTools Protocols. This makes it a very flexible tool as you don't have to install and configure a separate browser driver to run tests, Chrome DevTools protocol is also compatible with other browsers asides chrome.
The following are some of the Cons WebdriverIO;
##### Difficult to Setup
Webdriver is difficult to set up, the current implementation of WebdriverIO requires the installation of a separate browser driver for the specific browser the test is to be run with as well as separately installing Webdriver itself. WebdriverIO allows you to run tests based on web driver protocolUnlike tools like puppeteer and Cypress that allows the remote or programmatic control of web browserscan be installed using one line of code.
- Possible Mentor(s)##### Difficult to upgrade
- Have you contacted your mentors already?When a new version of WebdriverIO is released, it's always a difficult process to migrate to a new version of it.
##### Device Emulation
Puppeteer and Cypress allows the emulation of several mobile devices, including tablets, androids, and iPhones. Puppeteer and Cypress handles device emulation differently from WebdriverIO. With WebdriverIO, you simply resize the screen of the webpage to that of the device you want to emulate. There are a couple of problems with this implementation, some of the functionality of the webpage might be dependent on the device OS and not necessarily it's screen size, In such a scenario, Webdriver IO would handle device emulated tests poorly.
##### Access to Chrome Dev Tools
Puppeteer and Cypress by default has full access and control over all of the chrome Devtools functionality which makes it very useful when writing tests, It's gives access to functionalities like Network throttling, code coverage, browser's console, etc. However, WebdriverIO needs to use Puppeteer under the hood to access chrome dev tools.
##### Simpler JavaScript Execution
Puppeteer makes it very easy to run JavaScript codes within the browser or current page context. This feature is super useful and comes in handy when testing.
**Mentor(s)**: @zeljkofilipin , @Jpita
Have you contacted your mentor already? Yes, I have already contacted them.
===Deliverables
Describe the timeline of your work with deadlines and milestones, broken down week by week. Make sure to include time you are planning to allocate for investigation, coding, deploying, testing and documentation- Getting familiar with all the tests codebase of some Wikimedia projects I'll be working on.
- Working with mentors to define what needs to be tested on each project.
- Re-writing automated tests for some of the Wikimedia projects I'll be working on as a part of the evaluation.
- Providing a well-detailed documentation for these tests.
- Working with mentors to define standards for the tests.
- Working with mentors to deploy these tests to various platforms i.e Jenkins, CI/CD, etc.
- Giving the Pros and Cons of each framework this test was written in
#### Phase I evaluation
- Understand the workflow of MediaWiki and run manual tests on it.
- Identify what needs to be tested and new tests that need to be added that wasn't previously implemented with WebdiverIO
Describe the timeline of your work with deadlines and milestones, broken down week by week. Make sure to include the time you are planning to allocate for investigation, coding, deploying, testing and documentation
===Participation
Describe how you plan to communicate progress and ask for help, where you plan to publish your source code, etc* I will be online on Zulip during my working hours ( 6:00 pm to 2:00 pm WAT(UTC+1)).
===About Me* I will use Phabricator for managing bugs.
Tell us about a few:* I will be easily reachable via my Gmail during my non-working hours.
- Your education (completed or in progress)* I will publish my weekly reports as a task on phabricator.
- How did you hear about this program?* All my codes would be pushed to a new branch on gerrit.
===About Me
- Will you have any other time commitments, such as school work, another jobI'm currently in my 3rd year, planned vacation, etcB.Tech Electrical and Electronics Engineering at the Federal University of Agriculture, during the duration of the program?Abeokuta.
- We advise all candidates eligible for Google Summer of Code and Outreachy to apply for both programs. Are you planning to apply to both programs and, if so, with what organization(s)?I got to hear about GSoC from a friend and saw a project that interests me on Wikimedia's Project Ideas page.
- What does making this project happen mean to you?I'm currently eligible to participate in GSoC and I believe the program would help me kick-start my career in Open Source Development
I'm a very enthusiastic person, and I'm usually very excited when learning something new or improving on something I previously knew. I've had some past experience with puppeteer, I feel with this project, I could improve my automation testing skills and write code that actually gets used by a lot of people
===Past Experience
Describe any relevant projects- I wrote a crawler that you've worked on previously and what knowledge you gained from working on them.scrapes similar data off of 8 different websites, Describe any open source projects you have contributed to as a user and contributor (include links). If you have already written a feature or bugfix for a Wikimedia technology such as MediaWiki, link to it here; we will give strong preference to candidates who have done sowrangles and correlates this data and serves the data over a RESTful API
- I contributed to the Open Collective API and fixed an issue they had with Rounding monetary amounts [here](https://github.com/opencollective/opencollective-api/pull/2392)
- I built a simple tool that does a deep comparison of Objects in JavaScript [here]()
#### Micro Tasks Completed
- https://phabricator.wikimedia.org/T248016
===Any Other Info- https://phabricator.wikimedia.org/T248232
Add any other relevant information such as UI mockups, references to related projects, a link to your proof of concept code, etc- https://phabricator.wikimedia.org/T248219 (Commit [here](https://gerrit.wikimedia.org/r/#/c/mediawiki/core/+/584079/))