use of org.robotframework.javalib.annotation.ArgumentNames in project JavaFXLibrary by eficode.
the class ConvenienceKeywords method getNodeText.
@RobotKeyword("Returns text value of the Node. \n\n" + "``locator`` is either a _query_ or _Object_ for a node whose getText method will be called, see " + "`3. Locating or specifying UI elements`. \n\n")
@ArgumentNames({ "locator" })
public String getNodeText(Object locator) {
Object node = objectToNode(locator);
// if(object instanceof String)
// object = robot.lookup((String)object).query();
robotLog("INFO", "Getting text value for node: \"" + node.toString() + "\"");
Class c = node.getClass();
try {
Method[] methods = c.getMethods();
for (Method m : methods) {
// There are two versions of getText: getText() and getText(int, int)
if (m.getName().equals("getText") && m.getParameterCount() == 0) {
robotLog("TRACE", "Calling method getText() for node: \"" + node.toString() + "\"");
try {
Object result = m.invoke(node);
return result.toString();
} catch (Exception e) {
// Return empty string in case cannot get text from node
return "";
// throw new JavaFXLibraryNonFatalException("Problem calling method getText() ", e);
}
}
}
throw new JavaFXLibraryNonFatalException("Get node text failed for node: \"" + node.toString() + "\". Node has no method getText().");
} catch (Exception e) {
if (e instanceof JavaFXLibraryNonFatalException)
throw e;
throw new JavaFXLibraryNonFatalException("Get node text failed for node: " + node.toString(), e);
}
}
use of org.robotframework.javalib.annotation.ArgumentNames in project JavaFXLibrary by eficode.
the class ConvenienceKeywords method printChildNodes.
@RobotKeyword("Prints all child nodes starting from a given node.\n\n" + "Optional argument ``root`` is the starting point from where to start listing child nodes. It can be either a _query_ or _Object_, " + "see `3.1 Using queries` and `3.2 Using objects`. Defaults to root node of current window. \n\n" + "\nExample:\n" + "| ${my node}= | Find | \\#node-id | \n" + "| Print Child Nodes | ${my node} | \n")
@ArgumentNames({ "root=" })
public void printChildNodes(Object root) {
try {
robotLog("INFO", "Printing tree structure for node: \"" + root.toString() + "\"");
printTreeStructure((Parent) objectToNode(root));
} catch (ClassCastException e) {
throw new JavaFXLibraryNonFatalException(root.getClass() + " is not a subclass of javafx.scene.Parent");
}
}
use of org.robotframework.javalib.annotation.ArgumentNames in project JavaFXLibrary by eficode.
the class ConvenienceKeywords method getContextMenuItems.
@RobotKeyword("Returns context menu items as a dictionary containing menu name:node pairs. \n\n" + "Optional parameter ``locator`` is an _Object:Window_ for specifying which contextMenu(window) items should be collected. " + "Default value is the last window returned by `Get Target Windows` -keyword. \n" + "\nExamples:\n" + "| Click On | \\#menu-button-id | \n" + "| ${menu items}= | Get Context Menu Items | \n" + "| Dictionary Should Contain Key | ${menu items} | menu item name" + "| Click On | &{menu items}[menu item name] | \n\n")
@ArgumentNames({ "locator=" })
public Map<String, Object> getContextMenuItems(Window window) {
try {
ContextMenu cm = (ContextMenu) window;
Map<String, Object> menuItems = new HashMap<>();
for (Node node : robot.rootNode(window).lookupAll(".menu-item")) {
menuItems.put(getMenuItemText(node), mapObject(node));
}
return menuItems;
} catch (ClassCastException cce) {
throw new JavaFXLibraryNonFatalException("Unable to handle target as ContextMenu!");
}
}
use of org.robotframework.javalib.annotation.ArgumentNames in project JavaFXLibrary by eficode.
the class ConvenienceKeywords method getTableColumnValues.
@RobotKeyword("Returns list of values of the given table column.\n\n" + "``locator`` is either a _query_ or _Object:Node_ for identifying the TableView element, see " + "`3. Locating or specifying UI elements`. \n\n" + "``column`` Integer value for the column")
@ArgumentNames({ "table", "column" })
public List<Object> getTableColumnValues(Object locator, int column) {
try {
TableView table = (TableView) objectToNode(locator);
ObservableList items = table.getItems();
List<Object> values = new ArrayList<>();
TableColumn tableColumn = (TableColumn) table.getColumns().get(column);
if (tableColumn.getText() != null)
robotLog("INFO", "Getting values from column " + tableColumn.getText());
else
robotLog("INFO", "Getting values from column using index " + column);
for (Object item : items) {
Object value = tableColumn.getCellObservableValue(item).getValue();
values.add(mapObject(value));
}
return values;
} catch (IndexOutOfBoundsException e) {
throw new JavaFXLibraryNonFatalException("Out of table bounds: " + e.getMessage());
} catch (Exception e) {
throw new JavaFXLibraryNonFatalException("Couldn't get column values: " + e.getMessage());
}
}
use of org.robotframework.javalib.annotation.ArgumentNames in project JavaFXLibrary by eficode.
the class ConvenienceKeywords method findAllWithPseudoClass.
@RobotKeyword("Returns *all* nodes matching query AND given pseudo-class state. \r\n" + "``query`` is a query locator, see `3.1 Using queries`.\n\n" + "``pseudo`` is a String value specifying pseudo class value.\n\n" + "``failIfNotFound`` specifies if keyword should fail if nothing is found. By default it's false and " + "keyword returns null in case lookup returns nothing.\n\n" + "\nExample:\n" + "| ${my node}= | Find All With Pseudo Class | .check-box-tree-cell .check-box | selected | \n")
@ArgumentNames({ "query", "pseudo", "failIfNotFound=" })
public List<Object> findAllWithPseudoClass(String query, String pseudo, boolean failIfNotFound) {
robotLog("INFO", "Trying to find all nodes with query: \"" + query + "\" that has pseudoclass state as: \"" + pseudo + "\", failIfNotFound= \"" + Boolean.toString(failIfNotFound) + "\"");
try {
Set<Node> nodes = robot.lookup(query).queryAll();
Set<Node> matches = nodes.stream().filter(n -> n.getPseudoClassStates().stream().map(PseudoClass::getPseudoClassName).anyMatch(pseudo::contains)).collect(Collectors.toSet());
return mapObjects(matches);
} catch (JavaFXLibraryNonFatalException e) {
if (failIfNotFound)
throw e;
return Collections.emptyList();
} catch (Exception e) {
throw new JavaFXLibraryNonFatalException("Find all with pseudo class operation failed for query: \"" + query + "\" and pseudo: \"" + pseudo + "\"", e);
}
}
Aggregations