Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(java): ✨ Added Opera browser support #32

Merged
merged 10 commits into from
Mar 6, 2022
16 changes: 8 additions & 8 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
test:
needs:
- build
runs-on: ubuntu-latest
runs-on: macos-latest
steps:
- name: Check out Git repository
uses: actions/checkout@v2
Expand All @@ -59,18 +59,17 @@ jobs:
with:
name: target

- name: Install Chrome
run: |
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
sudo apt-get update
sudo apt-get install google-chrome-stable
docker run -d -p 4444:4444 -v /dev/shm:/dev/shm selenium/standalone-chrome:4.1.2
- name: Install Opera
run: brew install --cask opera

- name: Start Selenium Grid
run: java -jar libs/selenium-server-4.1.2.jar standalone > selenium-grid.log &

- name: Test execution
env:
CLOUD_USER: ${{ secrets.CLOUD_USER }}
CLOUD_KEY: ${{ secrets.CLOUD_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: mvn org.jacoco:jacoco-maven-plugin:prepare-agent install -Pcoverage-per-test

- name: Test Report
Expand All @@ -86,6 +85,7 @@ jobs:
with:
name: target
path: |
${{ github.workspace }}/selenium-grid.log
${{ github.workspace }}/target
${{ github.workspace }}/reports

Expand Down
Binary file added libs/selenium-server-4.1.2.jar
Binary file not shown.
5 changes: 5 additions & 0 deletions src/main/java/com/github/wasiqb/boyka/enums/Browser.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ public enum Browser {
* No browser.
*/
NONE,
/**
* Opera browser.
*/
OPERA,
/**
* Remote Grid / cloud browser.
*/
Expand All @@ -47,4 +51,5 @@ public enum Browser {
* Safari browser.
*/
SAFARI

}
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import static io.github.bonigarcia.wdm.WebDriverManager.chromedriver;
import static io.github.bonigarcia.wdm.WebDriverManager.edgedriver;
import static io.github.bonigarcia.wdm.WebDriverManager.firefoxdriver;
import static io.github.bonigarcia.wdm.WebDriverManager.operadriver;
import static io.github.bonigarcia.wdm.WebDriverManager.safaridriver;
import static java.text.MessageFormat.format;
import static java.util.Objects.requireNonNull;
Expand All @@ -48,7 +49,10 @@
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.edge.EdgeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.opera.OperaDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.safari.SafariDriver;
Expand Down Expand Up @@ -133,9 +137,7 @@ private WebDriver setupChromeDriver (final WebSetting webSetting) {
options.addArguments ("--no-sandbox");
options.addArguments ("--disable-gpu");
options.addArguments ("--disable-dev-shm-usage");
if (webSetting.isHeadless ()) {
options.addArguments ("--headless");
}
options.setHeadless (webSetting.isHeadless ());
return new ChromeDriver (options);
}

Expand All @@ -147,14 +149,23 @@ private void setupDriver () {
}
}

private WebDriver setupEdgeDriver () {
private WebDriver setupEdgeDriver (final WebSetting webSetting) {
edgedriver ().setup ();
return new EdgeDriver ();
final EdgeOptions options = new EdgeOptions ();
options.setHeadless (webSetting.isHeadless ());
return new EdgeDriver (options);
}

private WebDriver setupFirefoxDriver () {
private WebDriver setupFirefoxDriver (final WebSetting webSetting) {
firefoxdriver ().setup ();
return new FirefoxDriver ();
final FirefoxOptions options = new FirefoxOptions ();
options.setHeadless (webSetting.isHeadless ());
return new FirefoxDriver (options);
}

private WebDriver setupOperaDriver () {
operadriver ().setup ();
return new OperaDriver ();
}

private WebDriver setupRemoteDriver (final WebSetting webSetting) {
Expand All @@ -180,11 +191,14 @@ private void setupWebDriver (final WebSetting webSetting) {
setDriver (this.applicationType, setupSafariDriver (), this.setting);
break;
case EDGE:
setDriver (this.applicationType, setupEdgeDriver (), this.setting);
setDriver (this.applicationType, setupEdgeDriver (webSetting), this.setting);
break;
case FIREFOX:
setDriver (this.applicationType, setupFirefoxDriver (webSetting), this.setting);
break;
case OPERA:
default:
setDriver (this.applicationType, setupFirefoxDriver (), this.setting);
setDriver (this.applicationType, setupOperaDriver (), this.setting);
break;
}
}
Expand Down
26 changes: 19 additions & 7 deletions src/test/resources/test-config.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,22 @@
"explicit_wait": 30
},
"web": {
"test1": {
"test_local_chrome": {
"browser": "CHROME"
},
"test2": {
"test_local_firefox": {
"browser": "FIREFOX"
},
"test_local_edge": {
"browser": "EDGE"
},
"test_local_safari": {
"browser": "SAFARI"
},
"test_local_opera": {
"browser": "OPERA"
},
"test_browserstack_chrome": {
"browser": "REMOTE",
"cloud": "BROWSER_STACK",
"protocol": "HTTPS",
Expand All @@ -26,14 +38,14 @@
"name": "Test BrowserStack Session"
}
},
"test3": {
"test_selenium_grid": {
"browser": "REMOTE",
"cloud": "NONE",
"port": "4444",
"capabilities": {
"browserName": "chrome",
"version": "77.0.3865.75",
"platform": "LINUX"
"browserName": "safari",
"version": "15.3",
"platform": "MAC"
}
}
},
Expand Down Expand Up @@ -83,4 +95,4 @@
}
}
}
}
}
2 changes: 1 addition & 1 deletion test-suites/testng-web-bs.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
<suite name="Boyka Suite" verbose="2">
<test name="Test Boyka web on BrowserStack">
<parameter name="appType" value="WEB"/>
<parameter name="driverKey" value="test2"/>
<parameter name="driverKey" value="test_browserstack_chrome"/>
<classes>
<class name="com.github.wasiqb.boyka.testng.web.TestWeb"/>
</classes>
Expand Down
2 changes: 1 addition & 1 deletion test-suites/testng-web-grid.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
<suite name="Boyka Suite" verbose="2">
<test name="Test Boyka web on Selenium Grid">
<parameter name="appType" value="WEB"/>
<parameter name="driverKey" value="test3"/>
<parameter name="driverKey" value="test_selenium_grid"/>
<classes>
<class name="com.github.wasiqb.boyka.testng.web.TestWeb"/>
</classes>
Expand Down
32 changes: 30 additions & 2 deletions test-suites/testng-web-local.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,38 @@
-->

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Boyka Web Suite" verbose="2">
<suite name="Boyka Web Suite" verbose="2" thread-count="4" parallel="tests">
<test name="Test Boyka web on Local Chrome">
<parameter name="appType" value="WEB"/>
<parameter name="driverKey" value="test1"/>
<parameter name="driverKey" value="test_local_chrome"/>
<classes>
<class name="com.github.wasiqb.boyka.testng.web.TestWeb"/>
</classes>
</test>
<test name="Test Boyka web on Local Firefox">
<parameter name="appType" value="WEB"/>
<parameter name="driverKey" value="test_local_firefox"/>
<classes>
<class name="com.github.wasiqb.boyka.testng.web.TestWeb"/>
</classes>
</test>
<test name="Test Boyka web on Local Edge">
<parameter name="appType" value="WEB"/>
<parameter name="driverKey" value="test_local_edge"/>
<classes>
<class name="com.github.wasiqb.boyka.testng.web.TestWeb"/>
</classes>
</test>
<test name="Test Boyka web on Local Safari">
<parameter name="appType" value="WEB"/>
<parameter name="driverKey" value="test_local_safari"/>
<classes>
<class name="com.github.wasiqb.boyka.testng.web.TestWeb"/>
</classes>
</test>
<test name="Test Boyka web on Local Opera">
<parameter name="appType" value="WEB"/>
<parameter name="driverKey" value="test_local_opera"/>
<classes>
<class name="com.github.wasiqb.boyka.testng.web.TestWeb"/>
</classes>
Expand Down