Suppose
there is a web page we're interested in modelling for an RPA process.
we access it via Chrome (because other browsers do not render the page appropriately or consistently)
to the naked eye, it contains one or more tables having real-time data. As a result, the tables are rendered dynamically (i.e. the underlying HTML source does not contain the Old School <table><tr><td> tags... but various layers of <DIV> and <SPAN> tags).
depending upon various filters used in the business process, the table presentations are not always consistent (the tables won't always have the same number of rows or columns; the columns won't always be in the same order; etc.)
the most stable and consistent feature of these dynamic tables (regardless of the current visible manifestation of these tables) is that one or more Attributes of an HTML tag for a cell in these tables describes the nature of data in that particular cell. For example -- if, in a particular table cell, web text is contained by the tag '<DIV column-name="employee-last">' we know
the web text corresponds to the last name of an employee AND
any other web text in that table whose DIV tag contains the 'column-name="employee-last"' attribute ALSO will be the either
the last name of an employee OR
the heading of the Employee Last Name column.
It would be valuable to be able to include HTML Tag Attribute information in Attributes that define Elements in the Chrome Application Modeller. Currently, we cannot. The next best thing we can do is
read data from the dynamic table that we "guess" to be from an appropriate cell in the table,
have Blue Prism read the key HTML Tag Attribute and return its value,
if the Attribute value corresponds to the value we expect, we accept the associated data... if NOT, we take another guess until we find a cell containing the right HTML Tag Attribute.
I had intended to attach a release of a self-contained BluePrism Chrome Object, but the ideas portal considers that to be unsupported for the purposes of uploading to the portal. The object would have contained two actions, "Read From AG Grid Web_ Element" and "Read From AG Grid Expressions and Context." Each action,
Launches a different public-facing web page in Chrome...
each web page contains dynamic tables built by the owner of the website (each web page has the same owner)...
the owner of the website is a commercial enterprise that sells bundles of Javascript Web controls to web developers so those developers can build pages that connect to data sources and display real-time dynamic tables.
Reads one of two headings (based on the True or False setting of the Data Stage in brown text above the Start stage of each object) of one of the dynamic tables for its HTML Path, its Bounds, and the value an HTML Attribute of the heading... its "col-id" Attribute, to be specific.
Calculates from the Web Path of the heading, a Regex expression which, when used as a Dynamic attribute for a Web Path, SOMETIMES finds data from the rows below the heading that relate to the heading in question.
Conducts a search for data presumed to be in the column corresponding to the Heading we read.
Confirms whether the data has the same "col-id" Attribute value as the Heading... if so, it returns the value of the Web Text... if NOT, an Index is incremented and another search is executed.
Typically, this workaround is such a drag on RPA process performance, it is not viable.
In short... the workaround utilizes the HTML Tag Attribute "After The Fact." Incorporating it into the definition of an Element in the Application Model would utilize the Tag Attribute "Before The Fact" -- and much more efficiently. The desired enhancement:
In the Attributes section of the Element Details of the Application Modeller for a Blue Prism Chrome Object, add the following Attribute Names:
Web Attribute 1: Attribute Name Web Attribute 1: Attribute Value
Web Attribute 2: Attribute Name Web Attribute 2: Attribute Value
IF Both the Name and Value of Attribute 1 are set to Match: True in the Application Model, then Blue Prism should consider these settings to be related. Similarly for Name/Value of Attribute 2.
Examples:
Setting {Web Attribute 1: Attribute Name -- Match: True; Match Type: = (Equal); Value: "column-id"... Web Attribute 1: Attribute Value -- Match: True; Match Type: = (Equal); Value: "employee-last"} means "only consider web elements where one of the Attributes of the HTML Tag is named 'column-id' and the value of the 'column-id' Tag is 'employee-last'"
Setting {Web Attribute 1: Attribute Name -- Match: True; Match Type: = (Equal); Value: "column-id"... Web Attribute 1: Attribute Value -- Match: False} means "only consider web elements where one of the Attributes of the HTML Tag is named 'column-id' regardless of that Tag's value"
Setting {Web Attribute 1: Attribute Name -- Match: False... Web Attribute 1: Attribute Value -- Match: True; Match Type: = (Equal); Value: "employee-last"} means "only consider web elements where at least one of HTML Tag's Attributes has the value of 'employee-last' regardless of that Tag's name"
... View more