I currently have a relatively simple python script using selenium to open and do some general interactions with a Perspective project, that I can run in a swarm of docker containers and simulate a bit of load on a gateway.
This is pretty easy to do, however the way its done is kind of “non-deterministic” in approach. To find the specific component you want in selenium I have to access them by their IA class names, for example I may use the following function to click on a random row in a table:
def clickOnTableItem():
# Wait for the table to load its contents
while len(driver.find_elements_by_class_name("ia_table__body__rowGroup")) < 1:
time.sleep(0.5)
# Get count of items in the table
tableRows = driver.find_elements_by_class_name("ia_table__body__rowGroup")
# Define a random index from count
selectedIndex = random.randint(0, len(tableRows))
#Find the table row by its index
row = tableRows[selectedIndex]
# Click on element
row.click()
While this is fine if there is one table that takes up my page, what do I do if I have two tables? I would think that I might look for any rows inside of table 1, and then click on one, but I could have a dynamic number of tables (or similar component) but if it was possible to expose specific perspective properties in the HTML, I could find those and identify the container to search in.
In example, if I had 5 buttons on the screen, and each buttons name showed up as a class for that element. I could use find_elements_by_class_name("MyButtonName")
to identify the element and click on it.
One thing I have thought about is applying a fake style class to a component and then referencing that component with the perspective style class like find_elements_by_class_name("psc-FakeStyles/MyButtonName")
but this doesn’t feel like the cleanest solution.
Any ideas would be greatly appreciated!