Since Flood Element uses real CSS or XPath properties - it can be tricky to identify the object properties that will not only detect the correct object but also detect it reliably each time you run your test. The best course of action is to find properties of an object that fulfil the following criteria:
Ensure the properties are unique to the object you'd like to interact with
Ensure the properties are fairly easily readable for the object you'd like to interact with
Ensure the properties are reliable so that they can be accessed reliably every iteration
When looking to use CSS or XPath as your identification method for objects - the step-by-step method in doing this can be described below:
Using Google Chrome with the Developer Tools (F12) window shown, right click on the object and click on the Inspect menu item.
This will display the exact line of code that represents the object's properties
Within the code view - click on the ellipse icon on the left of the line in question as follows:
Click on the Copy menu item and then proceed to click on Copy selector (for CSS) or Copy XPath (for the XPath code) that you will be able to use in your Flood Element object properties.
let linkCart = By.css('[title="Cart"]')let element = await browser.findElement(linkCart)await element.click()
let linkCart = By.xpath("//a[contains(text(),'Cart')]")let element = await browser.findElement(linkCart)await element.click()
Flood Element is a great fit for SAP Fiori web-based applications and we've found the following examples are helpful when interacting with common SAP Fiori components.
contains method for object identification adds some robustness and readability to your code. SAP Fiori objects can contain large amount of dynamic and unfriendly properties that tend to change dynamically at every page load. Using these dynamic values will tend to break the execution of your script upon playback. Using something similar to the following provides a way for your scripts to be more reliable.
let input_username = By.xpath("//input[contains(@id, 'USERNAME_FIELD-inner')]")let element = await browser.findElement(input_username)await element.type('Floody20')
Using an object's text value can also simplify, stabilise, and enhance the readability of your script. Text labels also have the advantage that there is usually not more than one object with the same text value on the page at the one time.
let btn_LogOn = By.xpath("//span[contains(text(),'Log On')]")let element = await browser.findElement(btn_LogOn)await element.click()