Giter VIP home page Giter VIP logo

ui5-uiveri5's Introduction


UIVeri5 is deprecated and won’t be developed any further. Tests using UIVeri5 will continue to work in the foreseeable future. If you are looking for an alternative, you may consider: WDIO + WDI5


openui5

What is it

UIVeri5 is an E2E testing framework for UI5-based applications. It uses WebDriverJS to drive a real browser and interacts with your application as a real user would. UIVeri5 is heavily inspired by Protractor and brings most (and more) of its benefits to UI5 applications.

REUSE status

Benefits

  • Automatic synchronization with UI5 app rendering so there is no need to add waits and sleeps to your test. Tests are reliable by design.
  • Tests are written in synchronous manner, no callbacks, no promise chaining so are really simple to write and maintain.
  • Full power of webdriverjs, protractor and jasmine - deferred selectors, custom matchers, custom locators.
  • Control locators (OPA5 declarative matchers) allow locating and interacting with UI5 controls.
  • Does not depend on testability support in applications - works with autorefreshing views, resizing elements, animated transitions.
  • Declarative authentications - authentication flow over OAuth2 providers, etc.
  • Console operation, CI ready, fully configurable or IDE.
  • Covers full UI5 browser matrix: Chrome, Firefox, IE, Edge, Safari, iOS, Android.
  • Works with browser cloud provider like SauseLabs
  • Use generated snippets from Test Recorder that is built-in every UI5 app (from UI5 1.74)
  • Open-source, fork and modify to fit your specific neeeds.

Requirements

  • NodeJS, version 8.0 or higher

Configuration

UIVeri5 accepts a declarative configuration in a conf.js file. Configuration can be overridden with command-line arguments. All configuration options are explained in Configuration

Installation

Install globally:

$ npm install @ui5/uiveri5 -g

Usage

Create a test

Create a clean folder that will contain your test and configuration files. UIVeri5 uses Jasmine as a test runner so the test resides in a spec.js file. Put the declarative configuration in the conf.js file.

  • conf.js
exports.config = {
  profile: 'integration',

  baseUrl: 'https://openui5.hana.ondemand.com/test-resources/sap/m/demokit/master-detail/webapp/test/mockServer.html',
};
  • masterdetail.spec.js
describe('masterdetail', function () {

  it('should load the app',function() {
    expect(browser.getTitle()).toBe('Master-Detail');
  });

  it('should display the details screen',function() {
    element(by.control({
      viewName: 'sap.ui.demo.masterdetail.view.Master',
      controlType: 'sap.m.ObjectListItem',
      properties: {
        title: 'Object 11'
      }}))
    .click();
  });

  it('should validate line items',function() {
    expect(element.all(by.control({
      viewName: 'sap.ui.demo.masterdetail.view.Detail',
      controlType:'sap.m.ColumnListItem'}))
    .count()).toBe(2);
  });
});

Run the test

Open console in the test folder and execute:

$ uiveri5

You will see the test execution in the console and an overview when the test completes. Check the target folder for a visual report with screenshots.

Usage hints

By default uiveri5 will discover all tests in current folder and execute them on localy started Chrome. All of those defaults could be modified either in conf.js or by providing command-line arguments.

  • Specify non-default config file
$uiveri5 ci-conf.js
  • Enable verbose logging
$uiveri5 -v
  • Run tests on different browser
$uiveri5 --browsers=firefox
  • Run tests against app deployed on a specific system
$uiveri5 --baseUrl="http://<host>:<port>/app"
  • Run tests against a remote selenium server
$uiveri5 --seleniumAddress="<host>:<port>/wd/hub"

Learn more

Learn how to build your tests in our Testing Guide.

Support

If you face a problem, please check our list of common issues. If you think you found a bug, please create a new github issue. If you have a question, please ask on StackOverflow.

Known Bugs

No major bugs known.

Release plan

See how we plan to continue in our TODO .

Related projects

Here we gather few projects that build on UIVeri5 and tailor it for specific usecases.

  • Docker container with UIVeri5, Chrome, Jenkins: Link

Automatic Downloads

By default, when running locally, UIVeri5 downloads selenium.jar and/or the respective webdrivers - chromedriver, geckodriver from their official locations. You can disable the downloading or change the locations in profile.conf.js. When using --seleniumAddress, nothing is downloaded.

ui5-uiveri5's People

Contributors

antoniym avatar bozhkotodorov avatar cvakiitho avatar danieljtag avatar denisduev avatar fatschi avatar hmanchev avatar maximnaidenov avatar mide42 avatar nikolay-lyutov-sap avatar psidium avatar rodrigoeidelvein avatar sebastianwolf-sap avatar sebbi08 avatar tobiashofmann avatar tsaleksandrova avatar ultrara1n avatar xtatica avatar zhang-haidong 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

ui5-uiveri5's Issues

Firefox capabilities are not build properly

Following configuration for firefox browser capabilities doesn't work:

browsers: [{
		browserName: 'firefox',
		platformName: 'windows',
		capabilities: {
			firefoxOptions: {
				"args": ["--safe-mode"],
				"binary": "C:\\Program Files\\Mozilla Firefox\\firefox.exe"
			},
		}
	}],

And then the error once executed:

$ uiveri5 
INFO: @ui5/uiveri5 v1.39.0
INFO: Resolving specs
INFO: Check for latest major version of: geckodriver.exe
INFO: Check for latest version of: geckodriver.exe
(node:21484) [DEP0022] DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead.
INFO: Found latest version of geckodriver.exe: v0.24.0
INFO: Found correct binary locally: C:/Users/Me/AppData/Roaming/npm/node_modules/@ui5/uiveri5/selenium/geckodriver-v0.24.0.exe
INFO: Downloading webdriver binary: http://github.com/mozilla/geckodriver/releases/download/v0.24.0/geckodriver-v0.24.0-win32.zip
INFO: Executing 1 specs
[11:52:44] I/launcher - Running 1 instances of WebDriver
[11:52:44] E/launcher - Error: TypeError: Cannot read property 'apply' of undefined
    at C:\Users\Me\AppData\Roaming\npm\node_modules\@ui5\uiveri5\src\connection\directConnectionProvider.js:535:33
    at C:\Users\Me\AppData\Roaming\npm\node_modules\@ui5\uiveri5\node_modules\lodash\lodash.js:4911:15
    at Function.forIn (C:\Users\Me\AppData\Roaming\npm\node_modules\@ui5\uiveri5\node_modules\lodash\lodash.js:12951:11)
    at DirectDriverProvider.getNewDriver (C:\Users\Me\AppData\Roaming\npm\node_modules\@ui5\uiveri5\src\connection\directConnectionProvider.js:534:13)
    at Runner.createBrowser (C:\Users\Me\AppData\Roaming\npm\node_modules\@ui5\uiveri5\node_modules\protractor\built\runner.js:195:43)
    at q.then.then (C:\Users\Me\AppData\Roaming\npm\node_modules\@ui5\uiveri5\node_modules\protractor\built\runner.js:339:29)
    at _fulfilled (C:\Users\Me\AppData\Roaming\npm\node_modules\@ui5\uiveri5\node_modules\protractor\node_modules\q\q.js:834:54)
    at C:\Users\Me\AppData\Roaming\npm\node_modules\@ui5\uiveri5\node_modules\protractor\node_modules\q\q.js:863:30
    at Promise.promise.promiseDispatch (C:\Users\Me\AppData\Roaming\npm\node_modules\@ui5\uiveri5\node_modules\protractor\node_modules\q\q.js:796:13)
    at C:\Users\Me\AppData\Roaming\npm\node_modules\@ui5\uiveri5\node_modules\protractor\node_modules\q\q.js:604:44
[11:52:44] E/launcher - Process exited with error code 100

It appears that Firefox capabilities are not build properly. Can you take a look?

uiveri5: version 1.39.0
OS: windows 10, 64bit
Firefox: 67.0.4

browser.refresh() not working

Hey,

After trying to get the page to refresh with browser.refresh() I get an error
INFO: Expectation FAILED: Failed: Waiting for auth page to fully load. Step: redirect to login page.
The refresh is suppose to be committed after the first loading to a page with credentials. (entrance works fine). Please your advise.

Thanks,
Niv

driver is always downloaded, even if it already exists locally

the error is a problem in case the current user has no write access to the global npm folder

directConnectionProvider.js

return that._getLatestVersion(binary).then(function () {
return that._checkIfBinaryExists(binary.executable, true).then(function () {
return that._downloadDriver(binary);
});
});

(Multi)-Combobox - Binding by Path

Hi,

First sorry for the amount of "question" issues - I try to identify all controls I am able to test, and I am still struggling every now an than.

Question: I want to test a multi-combo-box via binding or key value.

For a Select, which is using a sap.ui.core.Item that is really simple. Example: https://sapui5.hana.ondemand.com/#/sample/sap.m.sample.Select/preview
I can select by binding path and by key property, and by that have language independent selectors.

//context
var item = element(by.control( { controlType : "sap.ui.core.Item", bindingPath: { propertyPath : "ProductId", path : "/ProductCollection/7" } }));

//key (probably better, due to JSON list binding, and by that only "index" access above..
var item = element(by.control( { controlType : "sap.ui.core.Item", properties:[{ key : "HT-1020" }] }));

Both Combo-Box and Multi-Combobox is using a sap.m.StandardListItem instead. This is a little ugly, as the Standard-List-Item seems to have "outsourced" sap.ui.core.Items (referenced via sap.m.MultiComboBox.prototype._getItemByListItem). In any case - sap.m.StandardListItem only has a title and description attribute - however no binding (probably due to the internal architecture of the popover list).

Example therefore for: https://sapui5.hana.ondemand.com/#/sample/sap.m.sample.ComboBox/preview
The only selector I can think of is selecting by a title - which is of course super annoying, as possibly language dependent.

var standardListItem = element(by.control( { controlType : "sap.m.StandardListItem", properties:[{ title : "Bahrain" }] }));

Selecting the referenced sap.ui.core.Item does not seem to be possible, as this item does not have a DomRef assigned..

tldr; How do you internally select sap.m.StandardListItem from a Combo-Box or a Multi-Combo-Box?

Thanks!

Error after switching to a new tab: uiveri5 is not defined

Description

After clicking on a button to open a document in a new tab, the uiveri5 is not defined.

A workaround could be user browser.refresh()on the new tab.

Error

INFO: Expectation FAILED: Failed: javascript error: uiveri5 is not definedReferenceError: uiveri5 is not defined
    at findByControl (<anonymous>:455:5)
    at <anonymous>:479:6
    at callFunction (<anonymous>:442:36)
    at <anonymous>:453:23
    at <anonymous>:454:3
  (Session info: chrome=76.0.3809.100)
  (Driver info: chromedriver=76.0.3809.126 (d80a294506b4c9d18015e755cee48f953ddc3f2f-refs/branch-heads/3809@{#1024}),platform=Mac OS X 10.14.6 x86_64)

Interaction Type must be explicitly mentioned

The following code is giving an exception during the assert. Reason is the Exception thrown by the Press OPA handler, which is not getting caught by the _findElements in resources/sap/ui/test/_ControlFinder-dbg.js. Can be solved by adding "interaction: "root"" to the assertion.
Might be intended behavior - Just a little misleading maybe.

Exception:
image

Call:
image

Log

INFO: Expectation FAILED: Failed: unknown error: Control Element sap.m.List#container-cart---homeView--productList has no dom representation idSuffix was triggerError: Control Element sap.m.List#container-cart---homeView--productList has no dom representation idSuffix was trigger
    at f.$ (https://openui5nightly.hana.ondemand.com/resources/sap/ui/test/actions/Action.js:6:579)
    at g (https://openui5nightly.hana.ondemand.com/resources/sap/ui/test/_ControlFinder.js:6:838)
    at https://openui5nightly.hana.ondemand.com/resources/sap/ui/test/_ControlFinder.js:6:1141
    at Array.map (<anonymous>)
    at Function.b._findElements (https://openui5nightly.hana.ondemand.com/resources/sap/ui/test/_ControlFinder.js:6:871)
    at findByControl (<anonymous>:396:35)
    at <anonymous>:397:6
    at callFunction (<anonymous>:361:33)
    at <anonymous>:371:23
    at <anonymous>:372:3
  (Session info: chrome=71.0.3578.98)
  (Driver info: chromedriver=2.45.615291 (ec3682e3c9061c10f26ea9e5cdcf3c53f3f74387),platform=Windows NT 6.1.7601 SP1 x86_64)

Sample:
test.spec.js

describe('test', function () {
    it('Test 0', function () {
        element(by.control({ id: /homeView--searchField/, interaction: { idSuffix: "I" } })).sendKeys('NOT_EXISTING');
        expect(element.all(by.control({ controlType: "sap.m.List", id: /productList/, aggregationEmpty: { name: "items" } })).count()).toBeGreaterThan(0);
    });
});

conf.js

exports.config = {
    profile: 'integration',
    baseUrl: 'https://openui5nightly.hana.ondemand.com/test-resources/sap/m/demokit/cart/webapp/index.html'
};

Thanks,
Timo

ui5-automated testing recording

Hi All,

First thanks for that repository - E2E testing (support/examples) was one of the missing features of the SAPUI5 framework (even though i personally like testcafe more than protractor).

What I'd like to understand: Is this library of strategic meaning for sap - in sense that it will be used as common end-to-end testing framework library for sapui5? Is the tool used SAP internally?

Background: I am writing a ui5-test recorder (chrome / firefox plugin) at the moment for testcafe (testcafe plugin: https://github.com/timostark/ui5TestcafeSelector), which seems to have a very similar approach to ensure test-stability compared to what you are using (don't only select controls by a ID, especially for lists, but instead try to find the best matching combination of attributes possible - see example below). An adaption for protractor / uiveri5 doesn't seem to be too difficult.

Therefore two questions:

  1. Is the project accepting pull requests, to extend the selector capabilities (e.g. select by aggregations, associations, or binding paths)?
  2. Is the repository used sap internal as strategic tool for sapui5 e2e testing?

sapui5_testing

Thanks a lot for an honest response :-)

Regards,
Timo

uiveri5 errors with JRE 11

Hi, using JRE 11, the uiveri5 binary fails to run. It works finde with JRE 8. Independent of the node version in use (tried it w/ v8 + v11).

Naunet: ~/git/test-proj/src/specs > uiveri5 
INFO: @ui5/uiveri5 v1.35.5
INFO: Resolving specs
INFO: Check for latest version of: chromedriver
(node:33709) [DEP0022] DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead.
INFO: Found correct webdriver locally: /Users/vbuzek/.nvm/versions/node/v11.8.0/lib/node_modules/@ui5/uiveri5/selenium/selenium-server-standalone-3.12.0.jar
INFO: Found latest webdriver version: 2.45
INFO: Found correct webdriver locally: /Users/vbuzek/.nvm/versions/node/v11.8.0/lib/node_modules/@ui5/uiveri5/selenium/chromedriver-2.45
INFO: Executing 1 specs
[10:08:35] I/launcher - Running 1 instances of WebDriver
[10:08:38] E/launcher - Cannot define class using reflection
[10:08:38] E/launcher - WebDriverError: Cannot define class using reflection
    at Object.checkLegacyResponse (/Users/vbuzek/.nvm/versions/node/v11.8.0/lib/node_modules/@ui5/uiveri5/node_modules/selenium-webdriver/lib/error.js:546:15)
    at parseHttpResponse (/Users/vbuzek/.nvm/versions/node/v11.8.0/lib/node_modules/@ui5/uiveri5/node_modules/selenium-webdriver/lib/http.js:509:13)
    at doSend.then.response (/Users/vbuzek/.nvm/versions/node/v11.8.0/lib/node_modules/@ui5/uiveri5/node_modules/selenium-webdriver/lib/http.js:441:30)
    at ManagedPromise.invokeCallback_ (/Users/vbuzek/.nvm/versions/node/v11.8.0/lib/node_modules/@ui5/uiveri5/node_modules/selenium-webdriver/lib/promise.js:1376:14)
    at TaskQueue.execute_ (/Users/vbuzek/.nvm/versions/node/v11.8.0/lib/node_modules/@ui5/uiveri5/node_modules/selenium-webdriver/lib/promise.js:3084:14)
    at TaskQueue.executeNext_ (/Users/vbuzek/.nvm/versions/node/v11.8.0/lib/node_modules/@ui5/uiveri5/node_modules/selenium-webdriver/lib/promise.js:3067:27)
    at asyncRun (/Users/vbuzek/.nvm/versions/node/v11.8.0/lib/node_modules/@ui5/uiveri5/node_modules/selenium-webdriver/lib/promise.js:2927:27)
    at /Users/vbuzek/.nvm/versions/node/v11.8.0/lib/node_modules/@ui5/uiveri5/node_modules/selenium-webdriver/lib/promise.js:668:7
    at processTicksAndRejections (internal/process/next_tick.js:81:5)
From: Task: WebDriver.createSession()
    at Function.createSession (/Users/vbuzek/.nvm/versions/node/v11.8.0/lib/node_modules/@ui5/uiveri5/node_modules/selenium-webdriver/lib/webdriver.js:769:24)
    at DirectDriverProvider.getNewDriver (/Users/vbuzek/.nvm/versions/node/v11.8.0/lib/node_modules/@ui5/uiveri5/src/connection/directConnectionProvider.js:480:46)
    at Runner.createBrowser (/Users/vbuzek/.nvm/versions/node/v11.8.0/lib/node_modules/@ui5/uiveri5/node_modules/protractor/built/runner.js:195:43)
    at q.then.then (/Users/vbuzek/.nvm/versions/node/v11.8.0/lib/node_modules/@ui5/uiveri5/node_modules/protractor/built/runner.js:339:29)
    at _fulfilled (/Users/vbuzek/.nvm/versions/node/v11.8.0/lib/node_modules/@ui5/uiveri5/node_modules/protractor/node_modules/q/q.js:834:54)
    at /Users/vbuzek/.nvm/versions/node/v11.8.0/lib/node_modules/@ui5/uiveri5/node_modules/protractor/node_modules/q/q.js:863:30
    at Promise.promise.promiseDispatch (/Users/vbuzek/.nvm/versions/node/v11.8.0/lib/node_modules/@ui5/uiveri5/node_modules/protractor/node_modules/q/q.js:796:13)
    at /Users/vbuzek/.nvm/versions/node/v11.8.0/lib/node_modules/@ui5/uiveri5/node_modules/protractor/node_modules/q/q.js:604:44
    at runSingle (/Users/vbuzek/.nvm/versions/node/v11.8.0/lib/node_modules/@ui5/uiveri5/node_modules/protractor/node_modules/q/q.js:137:13)
    at flush (/Users/vbuzek/.nvm/versions/node/v11.8.0/lib/node_modules/@ui5/uiveri5/node_modules/protractor/node_modules/q/q.js:125:13)
[10:08:38] E/launcher - Process exited with error code 199

enviornment:

  • macOS 10.14.2
  • openjdk version "11.0.2" 2019-01-15
  • OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
  • OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
  • node 11.8.0

problem in calling a child element

Hey,

I am trying to access a child element in the follow scenario:

  1. enter with credentials
    https://testflp-lkgtestcontp-testcontent-ar.cfapps.sap.hana.ondemand.com/cp.portal/site#Shell-home
  2. press the me area button (top right)
    3.press "edit home page"
  3. press the "x" button on demoTile (delete it)

I have issues with finiding the "x" that belongs to the "demoTile" with the following ways:

  1. element(by.jq('.sapUshellTile:has('.sapMText:contains("demoTile")')')).element(by.control({controlType: "sap.ui.core.Icon", properties:{src:"sap-icon://decline"}}));

element(by.control({controlType: "sap.ushell.ui.launchpad.Tile",descendant: {controlType: "sap.m.Text", properties: {text: "demoTile"}}})).element(by.control({controlType: "sap.ui.core.Icon"}));
3.
element(by.control({controlType: "sap.ushell.ui.launchpad.Tile"})).element(by.control({controlType: "sap.ui.core.Icon"}));

Always with the same error No element found using locator: "insertFirstLocatorHere.element"by.control({"controlType":"sap.ui.core.Icon","properties":{"src":"sap-icon://decline"}}) meaning there is something wrong with the child search.(classically the child)

Please your advise.

Many Thanks,
Niv

Failed: javascript error: uiveri5 is not definedReferenceError: uiveri5 is not defined

Hi Maxim,
After performing any CRUD operation on the UI5 website using uiveri5, the uiveri5 loses its context. I am getting below because of that.

INFO: Expectation FAILED: Failed: javascript error: uiveri5 is not definedReferenceError: uiveri5 is not defined
at findByControl (:364:5)
at :388:6
at callFunction (:352:33)
at :362:23
at :363:3
(Session info: chrome=74.0.3729.169)
(Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Mac OS X 10.14.5 x86_64)

Stable test while refreshing a page

Hi,

In a part of my test, I try to change the language of my site and as a result the page needs to be refreshed. When I do that, I get the following error:

veri5_error

I tried some workarounds, but the best solution I found till now is too isolate this particular check in a different test (and then the error disappears).

Thanks

Report - Old images are not deleted

any chance you can cleanup the old images in the screenshots folder of previous test runs? It's getting a bit full in there over time :-)

Efficient Search for Children

Hi,

Comment from #7

So you could simply get the table and assert the rows or get the rows and assert their count, etc. The aggregation matchers are an artefact from the past of OPA, before having the synchronisation (autoWait: true) and we keep them for backward compatibility

Unfortunatly I found no clear example (ancestor: locators.md for "getting the rows and assert their count".

Therefore to be sure - Would the following code be, what you expect for matching count of Rows within the categoryList of ui5 demo?

        expect(
            element(by.control({ id: /homeView--categoryList$/, interaction: "root" }))
                .all(by.control({ controlType: "sap.m.StandardListItem" })).count()).toBe(16);

If yes, i can also raise a pull request, for an extended example of ancestor matching.

Thanks for confirming,
Regards,
Timo

Select from drop down

Hi,

Is there any example available to select an element from drop down. Please refer to the screenshot
Screen Shot 2019-06-17 at 5 09 42 PM
for the type of drop down.

has no dom representation

I tried to access a input control, but I'll get this error message (but I can access Selects, TextAreas and Datepickers easily):

image

My selector:
module.exports = { ... ProjKaEstimatedCosts: element(by.control({ viewName: 'lew.ka.create_ka.view.projKa.CreateProjKa', // id: 'inputSchaetzkosten', controlType:'sap.m.Input', // interaction: "auto" })), ... }

I also tried the idSuffix property:
interaction: {idSuffix: "vhi"}

How can I access a input control to set a value?

How to dis/enable waitForUi5

Hi guys,

we want to test a UI5 application with uiveri5, but before we access our application there is a public webpage for login (which is not UI5 but basic HTML).
How can we dynamically dis/enable the waitForUi5 command in our tests?
Currently the test fails with the error:

INFO: Expectation FAILED: Failed: loadUI5Dependencies: No UI5 on this page
INFO: Expectation FAILED: Failed: waitForUI5Enabled is not defined

Protractor provides a method for this called waitForAngularEnabled() (https://www.protractortest.org/#/api?view=ProtractorBrowser.prototype.waitForAngularEnabled).

Thanks & greetings,
Sarah

How to start Chrome by locally downloaded ChromeDriver

https://github.com/SAP/ui5-uiveri5/blob/master/docs/config/drivers.md
From above link, it seems that we can start Chrome by locally downloaded ChromeDriver with below configuration.

connectionConfigs: {
    direct: {
      chromedriver: {
        localPath: 'C:/chromedriverzz.exe'
      }
    }
}
or command
uiveri5 --config.connectionConfigs.direct.binaries.chromedriver.localPath=C:/chromedriverzz.exe

But from the log, we can see that UIveri5 still downloads the latest WebDriver.

PS C:\Work\DevOps\uiveri5_test> uiveri5
INFO: @ui5/uiveri5 v1.37.0test>
INFO: Resolving specs
INFO: ===>Check for latest major version of: chromedriver.exe<===
(node:18808) [DEP0022] DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead.
INFO: Found latest major version of chromedriver.exe: 74
INFO: Check for latest version of: chromedriver.exe
INFO: Found latest version of chromedriver.exe: 74.0.3729.6
INFO: Found correct webdriver locally: C:/Users/xxx/AppData/Roaming/npm/node_modules/@ui5/uiveri5/selenium/chromedriver-74.0.3729.6.exe
INFO: Executing 1 specs
[16:53:01] I/launcher - Running 1 instances of WebDriver

I downloaded the source code and change the source code of file .\src\connection\directConnectionProvider.js as below

DirectConnectionProvider.prototype._getBinaryFileName = function(binaryName) {
  var that = this;
  var binary = that.binaries[binaryName];
  binary.localPath = 'C:/chromedriverzz.exe';  // hardcode here
  if (binary.localPath) {
    return that._checkIfBinaryExists(binary.localPath);
  } else {
    return that._downloadBinary(binary);
  }
};

Then I run the command "npm run uiveri5", it works now, see below logs.

PS C:\Work\DevOps\ui5-uiveri5> npm run uiveri5

> @ui5/[email protected] uiveri5 C:\Work\DevOps\ui5-uiveri5
> node bin/uiveri5

INFO: @ui5/uiveri5 v1.37.0
INFO: Resolving specs
(node:9720) [DEP0022] DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead.
INFO: ===>Found correct binary locally: C:/chromedriverzz.exe<===
INFO: Executing 4 specs
[11:17:48] I/launcher - Running 1 instances of WebDriver

I guess it can be implemented, is that right?

Use uiveri5 with Appium?

I was wondering whether you have looked into the possibility to run uiveri5 tests against a cordova (hybrid) app using Appium?

We currently build our tests using Robot Framework with Appium, but we experience the familiar issues with unstability, difficulty finding elements etc. It would be great to have a UI5 specific library to test our apps.

Appium is based on the webdriver specification, so it suggests it might be possible make uiveri5 compatible with Appium, but I am not familiar enough with the technology to be sure.

APITesting - request not defined

I tried to run api tests like described in the sample/apiTesting/APITesting.spec.js.
So I created the APITesting.spec.js file containing of:

describe('APITesting', function() {
    it('Should make api call to / and check reponse body', function() {
        request.get(browser.testrunner.config.params.apiURL+'/').do()
            .catch(function(responseError) {
                expect(responseError.status).toBe(401);
            });
    });
});

As soon as I run uiveri5 I get following error:

INFO: Suite started: APITesting
INFO: Spec started: Should make api call to / and check reponse body
INFO: Opening: https://baseurl.com/
INFO: UI5 Version: 1.70.0-SNAPSHOT
INFO: UI5 Timestamp: 201908230515
INFO: Expectation FAILED: Failed: request is not defined
INFO: Spec finished: Should make api call to / and check reponse body with status: FAILED

I don't think I need to import request into my spec file or do I?
What am I missing here?

Best regards
Dennis

navigate to a page in test code

Hi:
according to your read me file, uiveri5 could load a page vai config.js

exports.config = {
  profile: 'integration',

  baseUrl: 'https://openui5.hana.ondemand.com/test-resources/sap/m/demokit/master-detail/webapp/test/mockServer.html',
};

but if I want to verify multiple pages, I can not configure several baseUrls in config.js. So I need load page in test script. I have tried protractor way:

 browser.get("https://openui5.hana.ondemand.com/test-resources/sap/m/demokit/master-detail/webapp/test/mockServer.html");

but it will raise error since get method will verify angular.
then I try to use web driver API directly:

browser.driver.get("https://openui5.hana.ondemand.com/test-resources/sap/m/demokit/master-detail/webapp/test/mockServer.html");

this also not work, it raise uiveri5 undefined error. So I debug your source code, then write code like this:

browser.driver
    .get(
      "https://openui5.hana.ondemand.com/test-resources/sap/m/demokit/master-detail/webapp/test/mockServer.html"
    )
    .then(() => {
      return browser.loadUI5Dependencies();
    });

this time, it works.
So I think method browser.get should be enhanced to get rid of angular check. Or if there is other way to load page in test script, please state in documents. thanks.

Binding-Context / Object Access

Hi,

I already asked a similar question in #12 - I am not 100% sure though if i got you correctly here.
Example: I want to select Order Id 7991 in your demo-application browse-orders ( https://openui5.hana.ondemand.com/test-resources/sap/m/demokit/orderbrowser/webapp/test/mockServer.html ).

image

The order ID however is not available as "clean-technical-identifier". I can only ask for the Property title ("Order 7991"), which might be language dependent. If I check the binding context of this object, i see that the information I want, is perfectly available.
image

So I would expect a matcher:
BindingContext: { model: undefined, path: 'OrderID', value: 7991}

Unfortunatly the documentation of openui5 does not seem to provide such a matcher.
So the question: Where am I missing something here in that use case? Or are you "accepting" tests to be based on language dependent texts?

Regards,
Timo

Report - Need to open each suite to check overall status

Hello UIVeri5 Team,

in the report html generated after test execution you can select the different suites on top of the screen to check the suite status:

image

but there is no way to easily understand the overall status. E.g. have all suites been successfull or are there some failing? Can you output the suite status on the link on top of the screen?

regards Thomas

Veri5 chrome headless not working

Hey,
I'm trying to run my Veri5 test on a remote docker image.

When I'm not using the –headless flag, it crashes.
When I am using the –headless flag, it fails due to:
Expectation FAILED: Failed: loadUI5Dependencies: No UI5 on this page

(It happens when I try to run it localy too)
Can you please help me with this?

UIVeri5 in AzureDevops

I'm trying to use my working config (running on local machine) on Azure Devops Pipeline.
This error occurs.

image

The pipeline installs the package.json and it runs in headless mode.

cd conf

node ../node_modules/@ui5/uiveri5/bin/uiveri5 --params.user=$(username)--params.pass=$(password) --browsers=chromeHeadless

Do I have to do something additionally?

Issue with Dockerizing (Alpine) + Uiveri5

Hi,

Please could you let us know if we can dockerize Uiveri5 and is it compatible with Alpine?

We have built a docker image for Uiveri5, with Base as Alpine and below softwares are part of the container

  • nodejs,

  • git

  • openssh

  • JDK

  • Chrome (chromium)

  • Selenium jar is added

  • UIVERI5

Once the image is build, we are cloning the project from git hub url and inside the project folder we are executing the uiveri5 command, but while executing error is generated, Please find the below logs.

Please could you provide guidance in this regard.

Logs:
/usr/src/app/UiVeri5_First # uiveri5
INFO: @ui5/uiveri5 v1.35.6
INFO: Resolving specs
INFO: Check for latest version of: chromedriver
(node:20) [DEP0022] DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead.
INFO: Downloading webdriver binary: https://selenium-release.storage.googleapis.com/3.12/selenium-server-standalone-3.12.0.jar
INFO: Found latest webdriver version: 2.46
INFO: Downloading webdriver binary: https://chromedriver.storage.googleapis.com/2.46/chromedriver_linux64.zip
INFO: Executing 1 specs
[06:17:01] I/launcher - Running 1 instances of WebDriver
[06:17:23] E/launcher - Timed out waiting for driver server to start.
Build info: version: '3.12.0', revision: '7c6e0b3', time: '2018-05-08T15:15:08.936Z'
System info: host: 'bb1785c5a45a', ip: '172.17.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.125-linuxkit', java.version: '1.8.0_191'
Driver info: driver.version: unknown
[06:17:23] E/launcher - WebDriverError: Timed out waiting for driver server to start.
Build info: version: '3.12.0', revision: '7c6e0b3', time: '2018-05-08T15:15:08.936Z'
System info: host: 'bb1785c5a45a', ip: '172.17.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.125-linuxkit', java.version: '1.8.0_191'
Driver info: driver.version: unknown
at Object.checkLegacyResponse (/usr/lib/node_modules/@ui5/uiveri5/node_modules/selenium-webdriver/lib/error.js:546:15)
at parseHttpResponse (/usr/lib/node_modules/@ui5/uiveri5/node_modules/selenium-webdriver/lib/http.js:509:13)
at doSend.then.response (/usr/lib/node_modules/@ui5/uiveri5/node_modules/selenium-webdriver/lib/http.js:441:30)
at ManagedPromise.invokeCallback_ (/usr/lib/node_modules/@ui5/uiveri5/node_modules/selenium-webdriver/lib/promise.js:1376:14)
at TaskQueue.execute_ (/usr/lib/node_modules/@ui5/uiveri5/node_modules/selenium-webdriver/lib/promise.js:3084:14)
at TaskQueue.executeNext_ (/usr/lib/node_modules/@ui5/uiveri5/node_modules/selenium-webdriver/lib/promise.js:3067:27)
at asyncRun (/usr/lib/node_modules/@ui5/uiveri5/node_modules/selenium-webdriver/lib/promise.js:2927:27)
at /usr/lib/node_modules/@ui5/uiveri5/node_modules/selenium-webdriver/lib/promise.js:668:7
at
at process._tickCallback (internal/process/next_tick.js:188:7)
From: Task: WebDriver.createSession()
at Function.createSession (/usr/lib/node_modules/@ui5/uiveri5/node_modules/selenium-webdriver/lib/webdriver.js:769:24)
at DirectDriverProvider.getNewDriver (/usr/lib/node_modules/@ui5/uiveri5/src/connection/directConnectionProvider.js:480:46)
at Runner.createBrowser (/usr/lib/node_modules/@ui5/uiveri5/node_modules/protractor/built/runner.js:195:43)
at q.then.then (/usr/lib/node_modules/@ui5/uiveri5/node_modules/protractor/built/runner.js:339:29)
at _fulfilled (/usr/lib/node_modules/@ui5/uiveri5/node_modules/protractor/node_modules/q/q.js:834:54)
at self.promiseDispatch.done (/usr/lib/node_modules/@ui5/uiveri5/node_modules/protractor/node_modules/q/q.js:863:30) at Promise.promise.promiseDispatch (/usr/lib/node_modules/@ui5/uiveri5/node_modules/protractor/node_modules/q/q.js:796:13)
at /usr/lib/node_modules/@ui5/uiveri5/node_modules/protractor/node_modules/q/q.js:604:44
at runSingle (/usr/lib/node_modules/@ui5/uiveri5/node_modules/protractor/node_modules/q/q.js:137:13)
at flush (/usr/lib/node_modules/@ui5/uiveri5/node_modules/protractor/node_modules/q/q.js:125:13)
[06:17:23] E/launcher - Process exited with error code 199

Defining test suites

Hi,
are there any plans to implement support for test suites like protractor or selenium does?

I would like to separate my tests into various test suites so that i can execute particular tests behind a suite via cli parameter.

Regards
Simon

browserVersion does not work

I have this issue.
image

So I tried to set the browserversion 73, but it has no effect.
exports.config = { profile: 'integration', browsers:[{ browserName: 'chrome', browserVersion: 73 }], baseUrl: 'https://...index.html', };

How can I configure the browserVersion?

Firefox driver download error

Hi UIVeri5 Team,

I just started creating my first test with uiveri5 and try to launch my application using Firefox. But I am getting the below error.

INFO: @ui5/uiveri5 v1.37.0
INFO: Resolving specs
INFO: Check for latest major version of: geckodriver.exe
INFO: Check for latest version of: geckodriver.exe
(node:4904) [DEP0022] DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead.
INFO: Found latest version of geckodriver.exe: v0.24.0
INFO: Downloading webdriver binary: http://github.com/mozilla/geckodriver/releases/download/v0.24.0-win32.zip
Error: Error while processing: C:/Users/srao/AppData/Roaming/npm/node_modules/@ui5/uiveri5/selenium/geckodriver-v0.24.0.exe.zip ,details: Invalid or unsupported zip format. No END header found
at WriteStream. (C:\Users\srao\AppData\Roaming\npm\node_modules@ui5\uiveri5\src\connection\directConnectionProvider.js:262:22)
at WriteStream.emit (events.js:182:13)
at finishMaybe (_stream_writable.js:641:14)
at stream._final (_stream_writable.js:619:5)
at WriteStream._final (internal/fs/streams.js:264:3)
at callFinal (_stream_writable.js:612:10)
at process._tickCallback (internal/process/next_tick.js:63:19)

Can you please help me to resolve this issue?
Thanks.

Multiple browser configurations lead to filename error

Hello,

I observed the following issue when starting UIveri5 with a configuration that contains multiple browser objects and capabilities:

browsers: [
    {
        browserName: "chrome",
        capabilities: {
            platform: "LINUX",
            platformName: "LINUX",
            chromeOptions: {
                w3c: false,
                args: [
                    "disable-popup-blocking",
                    "--no-sandbox",
                    "--disable-dev-shm-usage"
                ]
            },
            remoteWebDriverOptions: {
                platformName: "linux",
                maximized: false,
                viewportSize: {
                    width: 1024,
                    height: 768
                }
            }
        }
    },
    {
        browserName: "chrome",
        capabilities: {
            platform: "ANDROID",
            deviceName: "samsung_galaxy_s6_9.0",
            remoteWebDriverOptions: {
                maximized: false
            }
        }
    }
]

With the above configuration, a runtime error is thrown:

Error: Error while processing: /home/user/workspace/UIVeri5Test/node_modules/@ui5/uiveri5/selenium//home/user/workspace/UIVeri5Test/node_modules/@ui5/uiveri5/selenium/chromedriver-76.0.3809.126.zip ,details: Invalid filename
    at WriteStream.<anonymous> (/home/user/workspace/UIVeri5Test/node_modules/@ui5/uiveri5/src/connection/directConnectionProvider.js:275:22)
    at WriteStream.emit (events.js:189:13)
    at finishMaybe (_stream_writable.js:641:14)
    at stream._final (_stream_writable.js:619:5)
    at WriteStream._final (internal/fs/streams.js:263:3)
    at callFinal (_stream_writable.js:612:10)
    at process._tickCallback (internal/process/next_tick.js:63:19)

I was able to trace it back to @ui5/uiveri5/src/connection/directConnectionProvider.js:302

DirectConnectionProvider.prototype._downloadBinary = function (binary) {
  var that = this;
  var root = that._getSeleniumRoot();

  if(typeof binary.executable === 'object') {
    binary.executable =  root + '/' + binary.executable[that.config.osTypeString];
  } else {
    binary.executable =  root + '/' + binary.executable;
  }

  return that._getLatestVersion(binary).then(function () {
    return that._checkIfBinaryExists(binary.executable, true).then(function () {
      return that._downloadDriver(binary);
    });
  });
};

Where the binary.executable is overwritten with the root and the executable path again when the second browser is processed.
This causes it to be appended to the path again which, of course, is invalid, so the chromedriver.zip file cannot be unpacked.

auth parameter access

Hi,

related to this uiveri5 --params.user=<user> --params.pass=<pass> I would like to access the credentials.

Inside the conf.js script I can access the params like this.
`auth: {

// form based
'fiori-form': {
user: '${params.user}',
pass: '${params.pass}'
}
}
`
In my login page object I can't do this. Do you have a public api documentation how I can access this cli arguments?

thanks in advance

GET params in config.baseUrl

Hi, me again, sorry :(
It seems that providing GET parameters in config.baseUrl only works on launching the first spec, not on subsequent ones.
conf.js:

exports.config = {
        //...
	baseUrl: 'http://localhost:9099/index.html?sap-ui-mockserver=true',
        // baseUrl: 'http://localhost:9099/index.html' <- works fine!
	//...
}

generic.spec.js:

describe('generic', () => {
	it('should load the app', () => {
		expect(browser.getTitle()).toBe('title');
	});
});

zgeneric.spec.js:

describe('zgeneric', () => {
	it('should load the app again', () => {
		expect(browser.getTitle()).toBe('title');
	});
});

Initial launch works, suite + test in generic.spec.js works and executes fine.
In Chrome, the second spec fails to load with a generic "ERR_FAILED", showing INFO: Expectation FAILED: Failed: Waiting for redirection to complete, target url: http://localhost:9099/index.html?sap-ui-mockserver=true on the cmd line.
in Firefox, the cmd line shows INFO: Expectation FAILED: Failed: Reached error page: about:neterror?e=corruptedContentErrorv2

env:

  • @ui5/uiveri5 v1.35.5
  • UI5 Version: 1.60.1
  • macOS 10.14.2
  • openjdk version "11.0.2" 2019-01-15
  • OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
  • OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
  • node 11.8.0

element.all option not there for ancestor control

var e = element(by.id("page1-intHeader-BarLeft")) // can be any locator
.element(by.control({
controlType: "sap.m.Button"
})); // will look for buttons in the header

The above code will return a lot of buttons and you can't loop over each button as e.each is not a function we are finding element not element.all.

Can element.all can be added for finding children?

Rich Text Editor can not display base64 image

while create an image with base64 src, and give it to Rich Text Editor. There was nothing ...
how to show the image in Rich text editor?
check my following code

// controller
var template = {};
var image ="<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAA...">";
template.body = image;
var oViewModel = new JSONModel(template);
this.getView().setModel(oViewModel, "template");
//view
<rte:RichTextEditor id="rte" value="{template>/body}" editorType="TinyMCE4" customToolbar="true" showGroupFont="true" showGroupInsert="true"
showGroupLink="true" height="360px"/>

//inspector
an empty img element.
image

//version
1.52.20

Running multiple specs with fiori login, leads to failure at the test procedure

Wenn running the uiveri5 with:

conf.js:

exports.config = {
    profile: 'visual',
    baseUrl: '----',
    auth: {
        'fiori-form': {user: '---', pass: '---'}
    }
};

And multiple *.spec.js with a single test, like:

describe('Check', function () {

    it('Test 2', function () {

        var searchField = element(by.control({
            controlType: "sap.m.SearchField",
            id: /searchField$/,
            interaction: {idSuffix: "I"}
        }));
        var objectListItem = element(by.control({controlType: "sap.m.ObjectListItem"}));
        searchField.sendKeys('Test Positive');
        objectListItem.click();
    });
});

leads to:

INFO: Expectation FAILED: Failed: Waiting for auth page to fully load
Wait timed out after 10000ms
INFO: Spec finished: Authentication with status: FAILED
INFO: Suite finished: Automation_Check with status: FAILED for: 12.908s

How can i fix this?

Provide a base class for Page Objects

Hello Maxim,

as in OPA5 I would like to have the possibility to e.g. merge standard actions into my PageObjects via 'baseClass'. What do you think?

return Opa5.createPageObjects({ onThePageXYZ: { baseClass: CommonPage, actions: { iPressTheUserButton: function () { const ...

Veri5 losses sync

Hi,

While running our tests in docker container since last Chrome build (75) veri5 is losing it's sync

[2019-06-12T08:58:03.215Z] [10:58:02] I/launcher - Running 1 instances of WebDriver
[2019-06-12T08:58:15.473Z] modifying: static-resources/contentManager/webapp/test/automation/e2eSanity/delete.site.directory.config.js setting: automation_site_1560329893429
[2019-06-12T08:58:15.473Z] INFO: Suite started: createSiteDirectory
[2019-06-12T08:58:15.473Z] INFO: Spec started: Entering Site Directory
[2019-06-12T08:58:15.473Z] INFO: Opening: https://.hana.ondemand.com/*
[2019-06-12T08:58:42.120Z] INFO: UI5 Version: 1.66.1
[2019-06-12T08:58:42.120Z] INFO: UI5 Timestamp: 201905290749
[2019-06-12T08:58:42.696Z] INFO: Spec finished: Entering Site Directory with status: PASSED
[2019-06-12T08:58:42.696Z] INFO: Spec started: Create new Site
[2019-06-12T08:58:57.623Z] ERROR: Error while taking report screenshot: WebDriverError: unknown error: cannot activate web view
[2019-06-12T08:58:57.623Z] (Session info: headless chrome=75.0.3770.80)
[2019-06-12T08:58:57.623Z] (Driver info: chromedriver=75.0.3770.8 (681f24ea911fe754973dda2fdc6d2a2e159dd300-refs/branch-heads/3770@{#40}),platform=Linux 4.14.81-coreos x86_64)
[2019-06-12T08:58:57.623Z] ERROR: Error while taking report screenshot: WebDriverError: unknown error: cannot activate web view
[2019-06-12T08:58:57.623Z] (Session info: headless chrome=75.0.3770.80)
[2019-06-12T08:58:57.623Z] (Driver info: chromedriver=75.0.3770.8 (681f24ea911fe754973dda2fdc6d2a2e159dd300-refs/branch-heads/3770@{#40}),platform=Linux 4.14.81-coreos x86_64)
[2019-06-12T08:58:57.623Z] ERROR: Error while taking report screenshot: WebDriverError: unknown error: cannot activate web view
[2019-06-12T08:58:57.623Z] (Session info: headless chrome=75.0.3770.80)
[2019-06-12T08:58:57.623Z] (Driver info: chromedriver=75.0.3770.8 (681f24ea911fe754973dda2fdc6d2a2e159dd300-refs/branch-heads/3770@{#40}),platform=Linux 4.14.81-coreos x86_64)
[2019-06-12T09:00:19.355Z] ERROR: Error while taking report screenshot: TimeoutError: timeout: Timed out receiving message from renderer: 10.000
[2019-06-12T09:00:19.355Z] (Session info: headless chrome=75.0.3770.80)
[2019-06-12T09:00:19.355Z] (Driver info: chromedriver=75.0.3770.8 (681f24ea911fe754973dda2fdc6d2a2e159dd300-refs/branch-heads/3770@{#40}),platform=Linux 4.14.81-coreos x86_64)
[2019-06-12T09:01:16.969Z] ERROR: Error while taking report screenshot: TimeoutError: timeout: Timed out receiving message from renderer: 10.000

OPA5 and UIVERI5

Hi team,
could you explain more detailed which scenarios should be tested with OPA5 and when uiveri5 is the better choice?
Best Regards,
Florian

Stable Test Execution for Launchpad Tiles

Hi All,

Sorry for an additional question (instead of issue). Fiori Launchpad tiles do not have static-ids. Additionally they don't have a static i18n text. The static key (Semantic Navigation) is hidden within a binding-context.
How are you internally solving that issue? Are you setting the browser-language to english, and select by the text property?

var genericTile = element(by.control( { controlType : "sap.m.GenericTile",
                 properties:[{ header : "Tile-Title" }] }));
genericTile.click();

Alternative way would be a jQuery selection $('a[href$="#Z_SEMANTIC#display"]')

I don't like both too much (Test shouldn't depend on translatable texts, I want to avoid "native" jQuery selectors where possible). Is there any way to make a by.control based on binding context values? So sth. like:

var genericTile = element(by.control( { controlType : "sap.ushell.ui.launchpad.Tile",
              context:{ propertyName: "target", model: null, value: "#Z_SEMANTIC#display" } }));
genericTile.click();

Especially for elements under control of the developer, such binding-context value checks could provided extended assertions tests, of stuff which is not directly visible on the UI.

In https://github.com/SAP/ui5-uiveri5/blob/master/docs/usage/locators.md I wasn't able to find anything about that. Also there doesn't seem to be any OPA5 matcher.

Thanks & Regards,
Timo

sap.ui.table.table checkbox row selection

I do not found a solution to select a row inside a sap.ui.table.table control.
The problem is that the table control does not make the checkbox visible. So the locator cannot find the checkbox.

How can I press the checkbox of the first table entry?

image

I tried something like this:

markEntryByIndex: function(index){ // return this.firstTableEntries.get(index); this.firstTable.all(by.control({ controlType: 'sap.m.Checkbox' })).get(index).click(); }

or this

await C.ob.markEntryByIndex(0).click(); await C.ob.markEntryByIndex(0).sendKeys(protractor.Key.ARROW_LEFT); await C.bo.markEntryByIndex(0).sendKeys(protractor.Key.ARROW_LEFT); await C.bo.markEntryByIndex(0).sendKeys(protractor.Key.ARROW_LEFT); await C.bo.markEntryByIndex(0).sendKeys(protractor.Key.ARROW_LEFT); await C.bo.markEntryByIndex(0).sendKeys(protractor.Key.ARROW_LEFT); await C.bo.markEntryByIndex(0).sendKeys(protractor.Key.ARROW_LEFT); await C.bo.markEntryByIndex(0).sendKeys(protractor.Key.ARROW_LEFT); await C.bo.markEntryByIndex(0).sendKeys(protractor.Key.ENTER);

How to run a single Jasmine suite?

Hello uiveri5 team,

we develop a larger set of specs and want to

  • run all the specs
  • run a subset of the specs by specifying a single suite (e.g. only those which had errors before)

we want to do this from command line without chaning test code

i checked related issues to this but I am not fully how to achieve it:

i managed excluding suites from commandline with this: uiveri5 --config.specExclude=print
... but this approach did not work for running a dedicated suite

regards Thomas

aggregationLengthEquals matcher doesn't work

Hi,

it seems that the "aggregationLengthEquals"-matcher re-used from OPA5 doesn't work in the uiveri5-context.
I have prepared a running sample + corresponding test over at https://github.com/vobu/ui5-uiveri5/tree/bug/aggregationLengthEquals, this is the diff:
vobu@d1b16c6

The test fails with:

uiveri5 console: DEBUG: No elements found using by.control locator. This is what control locator last logged: Found control with the global ID 'ListPage1' -  sap.ui.test.Opa5
1 out of 1 controls met the matchers pipeline requirements -  sap.ui.test.pipelines.MatcherPipeline
Control 'Element sap.m.List#ListPage1' has 3 Objects in the aggregation 'items' but it should have undefined -  sap.ui.test.matchers.AggregationLengthEquals
0 out of 1 controls met the matchers pipeline requirements -  sap.ui.test.pipelines.MatcherPipeline

uiveri5 console: INFO: Expectation FAILED: Failed: No element found using locator: by.control({"id":"ListPage1","aggregationLengthEquals":{"name":"items","value":3}})

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.