Code Monkey home page Code Monkey logo

carina's Introduction

Alt text

Carina is a Java-based test automation framework that unites all testing layers: Mobile applications (web, native, hybrid), WEB applications, Windows applications, REST services, Databases.

TRY DEMO PROJECT NOW

  • Carina framework is built on top of most popular open-source solutions like Selenium, Appium, TestNG allowing to reduce dependence on specific technology stack.

  • Carina supports all popular browsers (IE, Safari, Chrome, Firefox) and mobile devices (iOS/Android). Special feature for mobile domain: it reuses test automation code between IOS/Android up to 70-80%.

  • As far as our framework is built in Java, it is cross-platform. Tests may be easily executed both on Unix or Windows OS. All you need is JDK 11 installed.

  • Framework supports different types of databases - both relational and nonrelational (MySQL, SQL Server, Oracle, PostgreSQL), providing amazing experience of DAO layer implementation using MyBatis ORM framework.

  • API testing is based on Freemarker template engine. It enables great flexibility in generating REST requests and responses are dynamically changed by incoming arguments.

Alt text

The Carina Framework ecosystem consists of the following modules:

Project Name Description
Carina API For API testing, based on RestAssured library. Optional
Carina AWS S3 A set of utilities for working with Amazon S3. Optional
Carina Azure A set of utilities for working with Azure. Optional
Carina AppCenter A set of utilities for working with AppCenter. Optional
Carina DataProvider Provides the ability to use xls/csv as data sources. Optional
Carina WebDriver Contains logic for creating sessions. Part of Carina Core
Carina Utils Provides a set of tools for all components of Carina Framework. Part of Carina Core
Carina Commons Contains interfaces for pluggable dependencies (e.g. carina-azure). Part of Carina Core
Carina Crypto Contains utilities for encryption/decryption. Part of Carina Core

Sponsor

Zebrunner

Documentation and free support

Code formatter

We offer to use our configured Java code formatter for Eclipse. To use the same formatter in IntelliJ IDEA you should install and configure Eclipse Code Formatter.

License

Code - Apache Software License v2.0

Documentation and Site - Creative Commons Attribution 4.0 International License

carina's People

Contributors

akamarouski avatar akupriyanov avatar askomar avatar avabishchevich avatar brutskov avatar cboyle81 avatar crazypear avatar denatallia avatar denispitsul2020 avatar dependabot[bot] avatar dimagrinevich avatar dmitry-minchuk avatar dmtgrinevich avatar dprymudrau avatar eldarian avatar hursevich avatar igorv22 avatar kolyakrasnik avatar lryzhiko avatar maksimsarychau avatar mikalaibiazruchka avatar nsidorevich avatar patotskiy avatar sergeizagriychuk avatar sergeybrenko avatar siarhei-babich avatar tamikana avatar tsvrko avatar vdelendik avatar ykhudaleyeu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

carina's Issues

investigate possibility to move driverfactory functionality into separate module

it seems like for 3rd party integrations like browserstack/saucelabs/amazon etc better to have separate DriverFactory.
So in additions to DesktopFactory and MobileFactory we can register BrowserstackFactory with functionality for this custom client.
The root cause: each tool use their own capabilities toolset which differs from default selenium/appium.

For example browserstack need:
device=value
when standard is
deviceName=value

strange pause 10-13 seconds after suite execution

Need investigate and found a reason of pause of 10-13 seconds after tests execution.
Pay attention to the timestamp between two first lines
2017-09-17 18:20:54 AbstractTest [main] [DEBUG]Short suite file name: debug.xml
2017-09-17 18:21:11 Messager [main] [INFO]INFO: '**************** Test execution summary ****************'.
2017-09-17 18:21:11 Messager [main] [INFO]RESULT #1: TEST [User profile test - addFollowers] PASS [log=file://L:\smule\smule-qa.\reports\qa\1505661650340/User_profile_test_-_addFollowers/test.log]

Drag and drop for HTML5

Current drag and drop method doesn't work for HTML5 web apps.

Solution that I found:
WebElement exercise = getExerciseItem(name).getElement(); // what to drag
WebElement dayBlock = getDayBlock(day).getElement(); // where drop
Actions act = new Actions(getDriver());
Action drag = act.clickAndHold(exercise).build();
drag.perform();
Point coordinates = dayBlock.getLocation();
Robot robot = new Robot();
robot.mouseMove(coordinates.getX()+20,coordinates.getY()-20);
pause(5000);

Remove XmlNamingStrategy class at all

Refactor core and remove TestNamingUtil and XMLNameStrategy classes.
Name of the current test should be "calculated" in single place. Let's analyze if it is possible to do in ReportContext class where we save file for logging.
private static final ThreadLocal testDirectory = new ThreadLocal ();

Create new CommonUtils and push pause methods into it

Let's create in carina-commons or carina-utils file where we can collect some very-very high level static util methods.
And as 1st one move pause(long) and pause(double) into it from all ocurrences we have now

Mobile: provide possibility in debug to capture pages screenshots and sources and push them as single archive to artifacts

page source + screenshots are needed for UI Automator Viewer to be able to identify controls, their placement, id, xpath etc.
So after executing test in debug mode I'd like to have functionality which:

  1. generate page screenshot and page source as only page is initialized
  2. screen+page source for each failure
  3. all pages better to keep inside artifacts_folder/mobile_pages or test folder/mobile_pages
  4. after test method finish archive this folder content and add as single artifact to test metho into zafira

nginx-nexus proxy has a problem

improve carina nexus nginx config to fix:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project carina-core: Failed to deploy artifacts: Could not transfer artifact com.qaprosoft:carina-core:jar:5.2.1.203-20171210.222021-1 from/to deploymentRepo (http://ci.qaprosoft.com/nexus/content/repositories/snapshots/): Failed to transfer file: http://ci.qaprosoft.com/nexus/content/repositories/snapshots/com/qaprosoft/carina-core/5.2.1.203-SNAPSHOT/carina-core-5.2.1.203-20171210.222021-1.jar. Return code is: 413, ReasonPhrase: Request Entity Too Large. -> [Help 1]

improve capabilities setter for boolean arguments

before adding capability value to the desired capabilities list do extra verification.
if it is equals true or fals as string we should convert it to boolean.

it is required to be able to use vnc and video capturing with selenoid. It can't correctly resolve
enableVideo=true if it is provided as a string

createDriver() method throws an java.lang.NullPointerException

Logs:

2017-11-22` 11:53:29] [AuthService.java] [23] [INFO] Check user status for registration: mfpauto61
[2017-11-22 11:53:29] [AuthService.java] [23] [INFO] identified free user: mfpauto61
[2017-11-22 11:54:59] [DriverPool.java] [23] [ERROR] Driver initialization 'default' FAILED for selenium: null! Retry 1 of 1 time - Unable to create new remote session. desired capabilities = Capabilities [{app=/opt/apk/myfitnesspal-develop-10593-qa-release.apk, noSign=true, newCommandTimeout=180, STF_ENABLED=true, autoGrantPermissions=true, platformName=Android, deviceName=ANY}], required capabilities = Capabilities [{}]
Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
System info: host: 'e8ac6c32c60b', ip: '172.18.0.43', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-98-generic', java.version: '1.8.0_131'
Driver info: driver.version: AndroidDriver
[2017-11-22 11:55:09] [BaseMobileTest.java] [23] [ERROR] Attempt #0 failed:org.openqa.selenium.SessionNotCreatedException: Unable to create new remote session. desired capabilities = Capabilities [{app=/opt/apk/myfitnesspal-develop-10593-qa-release.apk, noSign=true, newCommandTimeout=180, STF_ENABLED=true, autoGrantPermissions=true, platformName=Android, deviceName=ANY}], required capabilities = Capabilities [{}]
Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
System info: host: 'e8ac6c32c60b', ip: '172.18.0.43', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-98-generic', java.version: '1.8.0_131'
Driver info: driver.version: AndroidDriver
[2017-11-22 11:55:37] [Device.java] [23] [INFO] adb connect ua.qaprosoft.com:7752
[2017-11-22 11:55:38] [DevicePool.java] [23] [INFO] register device fot current thread id: 23; device: 'Samsung_Galaxy_S8_Plus'
[2017-11-22 11:55:39] [DriverPool.java] [23] [ERROR] Driver initialization 'default' FAILED for selenium: null! Retry 1 of 1 time - null
[2017-11-22 11:55:49] [TestNamingUtil.java] [23] [WARN] Unable to find registered test name for threadId: 23. stack is null!
[2017-11-22 11:55:49] [TestNamingUtil.java] [23] [WARN] Unable to find registered test name for threadId: 23. stack is null!
[2017-11-22 11:55:49] [Messager.java] [23] [INFO] 
======================================================================================================================================
INFO: TEST [C16500 Favorites Lists - createRecipe] STARTED at [23:55:49 2017-11-22]
[2017-11-22 11:55:49] [ZafiraConfigurator.java] [23] [WARN] Unable to detect current device for threadId: 23
[2017-11-22 11:55:49] [Messager.java] [23] [INFO] 
INFO: TEST [C16500 Favorites Lists - createRecipe] SKIPPED at [23:55:49 2017-11-22] - java.lang.NullPointerException

com.qaprosoft.carina.core.foundation.webdriver.DriverPool.createDriver(DriverPool.java:317)
com.qaprosoft.carina.core.foundation.webdriver.DriverPool.restartDriver(DriverPool.java:188)
com.qaprosoft.carina.core.foundation.webdriver.DriverPool.restartDriver(DriverPool.java:152)
com.myfitnesspal.android.autotest.test.BaseMobileTest.login(BaseMobileTest.java:107)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:498)
org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)
org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:564)
org.testng.internal.Invoker.invokeConfigurations(Invoker.java:213)
org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138)
org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:175)
org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:107)
org.testng.TestRunner.privateRun(TestRunner.java:767)
org.testng.TestRunner.run(TestRunner.java:617)
org.testng.SuiteRunner.runTest(SuiteRunner.java:348)
org.testng.SuiteRunner.access$000(SuiteRunner.java:38)
org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:382)
org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
java.util.concurrent.FutureTask.run(FutureTask.java:266)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:748)

How detect which version is last stable

Hello.
I didn't know how to ask question except creating ticket...maybe it is a stupid Q, but how i identify what last version STABLE version i can pull from Nexus?

qps-hub lost connection to appium and delay tests execution

From time-to-time selenium hub can't forward command to node (selenium or appium) and wait for 600+ seconds. Issue can be reproduced on any device. As result we "freeze" all the testing a lot.
Find a way to determine lost node without waiting 600+ seconds.

Take screenshots on Assertion failures and getting Exceptions

It would be useful if we can get actual screenshots exactly on failing step, not only on ExtendedWebElement and TestListener events.

For example: if I have try/finally logic with some assertions in try{...} block and some actions in finally{...} block, and one assertion fails in try{...} - I'll get screenshot on the last page of finally{...} block, which is not related to the failing reason. The same situation with exceptions.

Test names are displayed incorrectly

Test names sometimes contain 'null'. Carina - 5.2.2.256-SNAPSHOT
screen shot 2017-12-27 at 3 11 31 pm

https://ua.qaprosoft.com/jenkins/job/Automation/view/MMF/job/MMF-iOS-Minimal-Acceptance/202/consoleFull

12:04:45 2017-12-27 04:04:50 ZafiraConfigurator [TestNG] [ERROR] [iPhone_6_1] TestRail API returned HTTP 500("Invalid characters in URI: [/api/v2/get_case/30739,1780576]")
12:04:45 com.qaprosoft.carina.core.foundation.report.testrail.core.APIException: TestRail API returned HTTP 500("Invalid characters in URI: [/api/v2/get_case/30739,1780576]")
12:04:45 at com.qaprosoft.carina.core.foundation.report.testrail.core.APIClient.sendRequest(APIClient.java:245)
12:04:45 at com.qaprosoft.carina.core.foundation.report.testrail.core.APIClient.sendGet(APIClient.java:89)
12:04:45 at com.uashop.autotest.refactored.util.testng.TestRailZafiraConfigurator.getTestRailTestCaseName(TestRailZafiraConfigurator.java:53)
12:04:45 at com.uashop.autotest.refactored.util.testng.TestRailZafiraConfigurator.getTestName(TestRailZafiraConfigurator.java:27)
12:04:45 at com.qaprosoft.zafira.listener.ZafiraListener.run(ZafiraListener.java:494)
12:04:45 at sun.reflect.GeneratedMethodAccessor91.invoke(Unknown Source)
12:04:45 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
12:04:45 at java.lang.reflect.Method.invoke(Method.java:497)
12:04:45 at org.testng.internal.MethodInvocationHelper.invokeHookable(MethodInvocationHelper.java:212)
12:04:45 at org.testng.internal.Invoker.invokeMethod(Invoker.java:707)
12:04:45 at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
12:04:45 at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
12:04:45 at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
12:04:45 at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
12:04:45 at org.testng.TestRunner.privateRun(TestRunner.java:767)
12:04:45 at org.testng.TestRunner.run(TestRunner.java:617)
12:04:45 at org.testng.SuiteRunner.runTest(SuiteRunner.java:348)
12:04:45 at org.testng.SuiteRunner.access$000(SuiteRunner.java:38)
12:04:45 at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:382)
12:04:45 at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
12:04:45 at java.util.concurrent.FutureTask.run(FutureTask.java:266)
12:04:45 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
12:04:45 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
12:04:45 at java.lang.Thread.run(Thread.java:745)

ExtendedElementLocator throws error in methods .isElementPresent() and .clickIfPresent() if element not found

Error has following stacktrace:

[ExtendedElementLocator.java] [1] [ERROR] Unable to find element: no such element: Unable to locate element: {"method":"id","selector":"agree"}
(Session info: chrome=64.0.3282.119)
(Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 10.0.16299 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 1.02 seconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '3.2.0', revision: '8c03df6', time: '2017-03-02 09:34:51 -0800'
System info: host: 'HOST-NAME', ip: 'XXX.XXX.XXX.XXX', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_91'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f), userDataDir=C:\Users\UserName\AppData\Local\Temp\scoped_dir12272_29763}, takesHeapSnapshot=true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=64.0.3282.119, platform=XP, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true, setWindowRect=true, unexpectedAlertBehaviour=}]
Session ID: dc4cc63090d56769e1228ae1bf7b505c
*** Element info: {Using=id, value=agree}
Command duration or timeout: 0 milliseconds

support custom mobile capabilities logic on carina level: fullResetBeforeSuite

there is standard fullReset capability which guarantee that app is uninstalled completely and cache is cleaned. Using this capability we can successfully override custom install/uninstall logic using direct adb calls (already removed from carina).
But negative aspect in this capability is that based on driver_mode we always reinstall application on the same device.
To minimize copy operation I proposed to add new capability:
-fullResetBeforeSuite

if it is true MobileCapabilityMatcher:

  1. when we request device at first and capabilities matchers are satisfied then we convert this capability to standard
    fullReset=true
  2. remember device udid into local storage
  3. During next attempt to open session on the same device do not transfer fullReset=true.

As result we will clean app/cache only at once during test suite start.

Swipe from MobileUtils doesn't work.

Swipe from MobileUtils doesn't work. Example of logs:

sun.reflect.GeneratedConstructorAccessor33.newInstance(Unknown Source) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) java.lang.reflect.Constructor.newInstance(Constructor.java:423) org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:215) org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:167) org.openqa.selenium.remote.http.JsonHttpResponseCodec.reconstructValue(JsonHttpResponseCodec.java:40) org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:82) org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:45) org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:164) io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:89) org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:646) io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:42) io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1) io.appium.java_client.android.AndroidDriver.execute(AndroidDriver.java:1) io.appium.java_client.PerformsTouchActions.performTouchAction(PerformsTouchActions.java:41) io.appium.java_client.TouchAction.perform(TouchAction.java:325) com.qaprosoft.carina.core.foundation.utils.mobile.MobileUtils.swipe(MobileUtils.java:447) com.qaprosoft.carina.core.foundation.utils.mobile.MobileUtils.swipeUntilElementPresence(MobileUtils.java:409) com.qaprosoft.carina.core.foundation.utils.mobile.MobileUtils.swipeUntilElementPresence(MobileUtils.java:380) com.myfitnesspal.refactored.gui.mobile.android.phone.diary.DiaryPage.clickNutritionBottomButton(DiaryPage.java:213) com.myfitnesspal.refactored.diary.DiaryTabTest.otherScreensTest(DiaryTabTest.java:34) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:498) org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84) org.testng.internal.MethodInvocationHelper$1.runTestMethod(MethodInvocationHelper.java:200) com.qaprosoft.zafira.listener.ZafiraListener.run(ZafiraListener.java:502) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:498) org.testng.internal.MethodInvocationHelper.invokeHookable(MethodInvocationHelper.java:212) org.testng.internal.Invoker.invokeMethod(Invoker.java:707) org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901) org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231) org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127) org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111) org.testng.TestRunner.privateRun(TestRunner.java:767) org.testng.TestRunner.run(TestRunner.java:617) org.testng.SuiteRunner.runTest(SuiteRunner.java:348) org.testng.SuiteRunner.access$000(SuiteRunner.java:38) org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:382) org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64) java.util.concurrent.FutureTask.run(FutureTask.java:266) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) java.lang.Thread.run(Thread.java:748)

desired capabilities annotation for tests needed

Sometimes we should execute test only on specific Android versions. For example we know that there are known automation limitations on Android versions <= 5.0.2, and some porblems on 5.1.1 but for 5.1 and 6+ everything is ok. To increase performance we can mark in annotation execution priority, or device os versions range, etc.

For example:
@SkipAndroidVersions("<5.1", "5.1.1")
@ExecutingPreorityOfAndroidVersions("7.0","6.0.1","7.1.1","6.0","5.1.1")
And in such case CI should try to execute this test first on first available device with os version 7.0, than if no such device - on 6.0.1 and so on. And skip all devices with os from Skip List. Postpond for availability any device from White list.

Similar thing can be used for iOS.

How to execute tests without Selenium hub

Hello
This is not a ticket. Just a question, since i didn't find where to ask questions.
When we configure Carina we need specify <selenium_host> property. Is there a chance to run a test on local selenium standalone specified in path? Or we always need make up hub?

P.S. As an improvement would be nice if you guys could do group on https://gitter.im/ and redirect there everybody, who has question, instead of creating tickets for question.

Thank you

Exception while using incorrect description format for Jira

If we use description format in tag Test like (description = "JIRA#") we are getting exception which caused test run terminating on Jenkins.

From the logs:
INFO: TEST [Test] FAILED at [21:35:40 2017-11-14] - 1

com.qaprosoft.carina.core.foundation.jira.Jira.getTickets(Jira.java:133)
com.qaprosoft.carina.core.foundation.listeners.AbstractTestListener.createTestResult(AbstractTestListener.java:603)
com.qaprosoft.carina.core.foundation.listeners.AbstractTestListener.passItem(AbstractTestListener.java:83)
com.qaprosoft.carina.core.foundation.listeners.AbstractTestListener.onTestSuccess(AbstractTestListener.java:342)
org.testng.internal.Invoker.runTestListeners(Invoker.java:1899)
org.testng.internal.Invoker.runTestListeners(Invoker.java:1879)
org.testng.internal.Invoker.invokeMethod(Invoker.java:778)
org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:745)

testrail updater doesn't work in 5.2.0.2 core

no valuable stack trace, just error message:
2017-10-27 20:32:08 DefaultTestRailUpdater [TestNG] [INFO]Updater Thread: 17
2017-10-27 20:32:08 TestNamingUtil [TestNG] [WARN]Unable to find registered test name for threadId: 17. stack is null!
2017-10-27 20:32:08 DefaultTestRailUpdater [TestNG] [ERROR]Unable to identify test name by threadId: 17

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.