Working with non-html tables


#1

Hi
trying to create a robust way of verifying non-html tables, specifically the beautiful code produced by MS Dynamics!
Each table (‘grid’ in MS speak) is visible in the DOM only for the section visible to user. The rest is dynamically generated when user scrolls… not only that but as user scrolls right on a wide table, the left of the table disappears from DOM.
To verify that columns are present, I have the plan that script finds top-left cell, then sendkeys TAB to next identified cell, verify text and tab again etc.
Cannot use Scroll To Element to navigate since any non-visible elements are not in DOM.
My questions are please:
a) is it possible to return the text of the element selected (after tabbing) or does tester need to specify each TO?
b) end goal is to create a keyword that can be used to iterate through multiple columns - it seems like finding one reference point and navigating from there should work and this approach would be used for table rows as well as headers. In theory, tab through any width of table and return text.
If a html table, I would be able to create a list of cell names based on the TH they sit in but this doesn’t seem possible.


#2

WebUI.getText(TestObject) keyword should be sufficient:

ーーーーーーーーーー

Your b seems asking us if it is possible to create a keyword that can be used to iterate through column(s) in the “gird” as you described above —

Well, I do not have immediate answer (yes or no) to it as I have never seen such a state-of-the-art keyword published. I guess it would be possible to develop it but the design would be heavily dependent on the HTML structure and the behavior of your Application Under Test.


#3

Yes.
If the cells contain editable elements <input type="text"> etc use verifyElementAttributeValue()
If they contain something like <span>data</span> use getText().

You didn’t quite get to the point of asking a question there. I assume it’s some like, “does this sound possible?”

Short answer, yes.

Longer answer, the devil is in the details.

Really? Sounds pretty tricky but I’m sure it’s possible.

I checked a couple links at https://docs.microsoft.com/en-us/dynamics365/ and it appears you need arrow keys in cells. Is that the right MS Dynamics site (I may be looking at the wrong tech)? Either way, that sounds possible.

Here’s my question:

But how? Is there a server trip? Does the app have all the data stored or does it make requests for the data it needs as the user scrolls?

I suspect it’s the latter, in which case, your automation is going to need to allow for that interruption.

In pseudo-code:

Set focus to first cell
loop {
  getText and Compare
  sendKey right-arrow
  wait-for-page-not-busy // smartWait possibly?
}

There will be other ifs and buts, like handling fails, handling end-of-row, move-to-next-row etc. but I think you get the idea.


#4

@kazurayam
Hi and thanks for input above, not had much chance to try the above method - I couldn’t get the grid to move through tabbing and also found that tabbing as a user was difficult to replicate with Sendkeys. What did work was JavaScript and ScrollBy on the table object. Cheers


#5

Hi Russ, thanks for comments above, the site you kindly linked is not quite the same interface (Microsoft have moved from a ‘classic’ view to new format) although behaviour is consistent. There are a lot of waits to place into scripts as content is pulled from server and elements are generated!