Set Attributes Action
The Set Attributes (Any Class) action has been enhanced to give the user an easy means to use and to data-drive V3DTF, StartAtText/StopAtText and more. There are 2 new parameters added to the "Set Attributes" action supported by the htmlPage class. "Substring To Replace" and "Replacement Substring". These can be useful if there are parts of the recognition attributes for a page that are dynamic.
Enhanced htmlPage Set Attributes Action:

There are 17 new parameters added for all other Html classes that support the "Set Attributes" action:

All of these new parameters perform work on the attribute string of the object that the step is set up against. The attribute string is only used by Certify to find the object at runtime. The changes these parameters make to the attribute string change the way that the object is found. All of these parameters can be data-driven, making them a very powerful tool to find dynamic content and elements in dynamic tables.
Parameters Reference
New Attribute String
The "New Attribute String" parameter is optional. If you want to completely change an object's attribute string at runtime, you can specify the New Attribute String here. If a "New Attribute String" is specified all the other parameters supported by the "Set Attributes" action will be performed on the attribute string specified in "New Attribute String", otherwise they will be performed on the object's Attribute String that is stored in the database.
Substring To Replace/Replacement Substring
The "Substring To Replace" and the "Replacement Substring" parameters are both optional and work together. All occurrences of the string specified in the "Substring To Replace" parameter will be replaced with the string specified in the "Replacement Substring" parameter. If "Replacement Substring" is left blank, all occurrences of "Substring To Replace" will be removed. The "Substring To Replace" parameter is case-sensitive. If the "Substring To Replace" is not found in the Attribute String, the "Set Attributes" step will fail. The "Replacement Substring" parameter will be ignored if there is no "Substring To Replace" parameter specified.
Attributes Instance
The "Attributes Instance" parameter is optional and allows the value in the V3 Attribute String's <instance> tags to be modified dynamically at runtime. "Attributes Instance" is handy for non-DTF actions. It will tell Certify to find the n'th instance of the object described by the Attribute String. "Attributes Instance" will be ignored if any of the DTF parameters are specified.
Start At Text/Stop At Text
The "Start At Text" and "Stop At Text" parameters are both optional and work together. "Start At Text" and "Stop At Text" are a means to limit the area in a webPage that Certify will search for the object under test. Specifying a "Start At Text" causes Certify to look through the document for the specified text and start the search for the object under test from there. "Stop At Text" is not required, but can be used to limit the search to only those objects that are found after the "Start At Text" and before the "Stop At Text". If "Stop At Text" is specified but "Start At Text" is not, then the "Stop At Text" will be ignored. "Start At Text" is often used if the page presents multiple similar tables and there are duplicated data found in the rows of several tables. This can cause the search to start at the correct table. Note: The specified "Start At Text" and "Stop At Text" must be contained in the value of an element's "innertext" attribute to be found.
DTF Parameters:
Note: If any of the following DTF parameters are used, Certify will assume that the object under test is to be found in a table row. Any of the preceding parameters can be used to find an element that is not in a table row or that is in a table row.
DTF Target Column Number
The "DTF Target Column Number" is optional. In a DTF operation the target object may not be the object described by the attribute string. The object described by the attribute string may be the only object in the row that has uniquely findable attributes and is therefore being used as a "row anchor" to ensure that the row being considered is a row of the table that is to be searched. In this case, the user may specify the cell that is the intended target of the operation by using the "DTF Target Column Number". "DTF Target Column Number" is one-based, meaning that the first column is to be specified as "1", not as "0". If "DTF Target Column Number" is specified, Certify will only deal with the cell object in the found row, not any element that is contained by that cell. But if for instance there is a checkbox in that cell, setting a step to click that cell will effectively check the checkbox contained by the cell. If the "DTF Target Column Number" is not specified, then the target object of the operation will be the object described by the Attribute String and will be assumed to be the child of a cell within the sought row. If "DTF Instance" is not specified and there are no "DTF Row Matching Strings" specified the "DTF Target Column Number" will be ignored.
DTF Instance
"DTF Instance" is optional and if specified will continue to search for objects described by the Attribute String until it finds the specified instance of the object. "DTF Instance" will override the Attributes Instance (the <instance> value in the Attribute String). "DTF Instance" can be used with or without "DTF Row Matching Strings".
Note: If any of the DTF parameters are specified, the object will only be looked for in table rows and the Attributes Instance will be ignored and assumed to be "1" (if no "DTF Instance" is specified) regardless of the value of the Attributes Instance parameter or the value within the <instance> tags in the Attribute String.
DTF Row Matching String 1 - DTF Row Matching String 10
"DTF Row Matching Strings" are optional. "DTF Row Matching Strings" are used to specify strings found in other cells of the target row to allow Certify to find the correct row. Typically the fewest strings necessary to ensure that the correct row is found are specified. There are 10 "DTF Row Matching String" parameters, but if you need more than 10, you can add more by delimiting any number of strings in any parameter with a "!~" delimiter. In fact, if you prefer you could enter all of your "DTF Row Matching Strings" in one parameter, each cell string delimited with "!~". Example: MyString1!~MyString2!~MyString3.
The order that the strings are entered is not important. All specified strings must simply exist in one of the cells of the target row that contains the cell or the cell child element that is the object under test. The string comparison with strings found in the row at runtime is case-insensitive. So, if you specify a search string of "MyString", it will be considered a match if the row contains the string "mystring".
Note: Certify will assume that the specified strings are found in the value of the innertext property of the row (the first <TR> parent of the cell or the cell containing the element described by the Attribute String). If a string is not found in the row's parent <TR>'s innertext the correct row will not be located. Sometimes all the cells in a row contain elements that display the text instead of the text being the cell's innertext attribute.
If the cell element is an htmlComboBox, every possible value found in the dropDown's list is found in the parent <TR> element's innertext. Certify would need to check the htmlComboBox element's "Selected" property to see which string is actually seen by the user.
If the cell element is an htmlEdit, the string will not be found in the parent <TR> element's innertext attribute at all. It will only be found in the element's "value" attribute.
Using Certify Web Learn to analyze the situation is best. For the table that you want to use DTF search strings on, look at the row's innertext property by right-clicking on the <TR> element (of a typical row that would need to be considered during a test) and choose properties. If the innertext attribute contains only the strings that you will use to uniquely identify the correct row, then you will not have a problem. Certify will simply check to see if each specified string is contained in the row's innertext attribute.
If the innertext attribute of the row does not have the strings, or has all possible values of the string (as is the case with an htmlComboBox or an htmlListBox in a cell), then you will need to let Certify know this by adding a token at the end of that search string. The token is the tagName of the object that will display the search string.
For instance if there is an htmlComboBox or an htmlListBox element in a cell and its selected value is the matching string and that string is "MyString", then for one of the "DTF Row Matching String" parameters, enter MyString<SELECT>. Then Certify will look at every cell in the row and if it has a SELECT element, the element's Selected property will be checked to see if it contains the search string.
If the element is an htmlEditBox, enter MyString<INPUT> and Certify will check each cell for a child INPUT element with a "value" attribute that matches the row matching search string.
Currently, only supported tokens are <SELECT> and <INPUT>.