use of org.openqa.selenium.JavascriptExecutor in project ats-framework by Axway.
the class HtmlFileBrowse method setFileInputValue.
/**
*
* @param webDriver {@link WebDriver} instance
* @param value the file input value to set
*/
protected void setFileInputValue(WebDriver webDriver, String value) {
String locator = this.getElementProperties().getInternalProperty(HtmlElementLocatorBuilder.PROPERTY_ELEMENT_LOCATOR);
String css = this.getElementProperty("_css");
WebElement element = null;
if (!StringUtils.isNullOrEmpty(css)) {
element = webDriver.findElement(By.cssSelector(css));
} else {
element = webDriver.findElement(By.xpath(locator));
}
try {
element.sendKeys(value);
} catch (ElementNotVisibleException enve) {
if (!UiEngineConfigurator.getInstance().isWorkWithInvisibleElements()) {
throw enve;
}
// try to make the element visible overriding some CSS properties
// but keep in mind that it can be still invisible using another CSS and/or JavaScript techniques
String styleAttrValue = element.getAttribute("style");
JavascriptExecutor jsExec = (JavascriptExecutor) webDriver;
try {
jsExec.executeScript("arguments[0].setAttribute('style', arguments[1]);", element, "display:'block'; visibility:'visible'; top:'auto'; left:'auto'; z-index:999;" + "height:'auto'; width:'auto';");
element.sendKeys(value);
} finally {
jsExec.executeScript("arguments[0].setAttribute('style', arguments[1]);", element, styleAttrValue);
}
} catch (InvalidElementStateException e) {
throw new SeleniumOperationException(e.getMessage(), e);
}
}
use of org.openqa.selenium.JavascriptExecutor in project ats-framework by Axway.
the class RealHtmlElementState method highlightElement.
private void highlightElement(boolean disregardConfiguration) {
if (webDriver instanceof PhantomJSDriver) {
// it is headless browser
return;
}
if (disregardConfiguration || UiEngineConfigurator.getInstance().getHighlightElements()) {
try {
WebElement webElement = RealHtmlElementLocator.findElement(element);
String styleAttrValue = webElement.getAttribute("style");
JavascriptExecutor js = (JavascriptExecutor) webDriver;
js.executeScript("arguments[0].setAttribute('style', arguments[1]);", webElement, // to change text use: "color: yellow; text-shadow: 0 0 2px #f00;"
"background-color: #ff9; border: 1px solid yellow; box-shadow: 0px 0px 10px #fa0;");
Thread.sleep(500);
js.executeScript("arguments[0].setAttribute('style', arguments[1]);", webElement, styleAttrValue);
} catch (Exception e) {
// swallow this error as highlighting is not critical
}
}
}
use of org.openqa.selenium.JavascriptExecutor in project ats-framework by Axway.
the class HiddenHtmlTable method getAllValues.
/**
* Get the values of all table cells.</br>
*
* <b>Note:</b> If a table cell contains a checkbox - we will return 'checked' or 'notchecked' value.
*
* @return a two dimensional array containing all table cell values
*/
@PublicAtsApi
public String[][] getAllValues() {
new HiddenHtmlElementState(this).waitToBecomeExisting();
WebElement table = HiddenHtmlElementLocator.findElement(this);
String scriptForHtml = generateScriptForGettingTableContent(".innerHTML");
Object returnedHtmlValue = ((JavascriptExecutor) webDriver).executeScript(scriptForHtml, table);
String scriptForObjects = generateScriptForGettingTableContent("");
Object returnedObjectsValue = ((JavascriptExecutor) webDriver).executeScript(scriptForObjects, table);
String[][] tableData = null;
if (returnedHtmlValue != null && returnedHtmlValue instanceof List && returnedObjectsValue != null && returnedObjectsValue instanceof List) {
List<?> htmlTable = (List<?>) returnedHtmlValue;
List<?> objectsTable = (List<?>) returnedObjectsValue;
// allocate space for a number of rows
tableData = new String[htmlTable.size()][];
for (int iRow = 0; iRow < htmlTable.size(); iRow++) {
if (htmlTable.get(iRow) instanceof List) {
List<?> htmlRow = (List<?>) htmlTable.get(iRow);
List<?> objectsRow = (List<?>) objectsTable.get(iRow);
// allocate space for the cells of the current row
tableData[iRow] = new String[htmlRow.size()];
for (int iColumn = 0; iColumn < htmlRow.size(); iColumn++) {
Object htmlWebElement = htmlRow.get(iColumn);
Object objectWebElement = objectsRow.get(iColumn);
// some data cannot be presented in textual way - for example a checkbox
String htmlValueString = htmlWebElement.toString().toLowerCase().replace("\r", "").replace("\n", "");
if (htmlValueString.matches(".*<input.*type=.*[\"|']checkbox[\"|'].*>.*")) {
// We assume this is a checkbox inside a table cell.
// We will return either 'checked' or 'notchecked'
tableData[iRow][iColumn] = htmlValueString.contains("checked") ? "checked" : "notchecked";
} else if (objectWebElement instanceof WebElement) {
// proceed in the regular way by returning the data visible to the user
tableData[iRow][iColumn] = ((WebElement) objectWebElement).getText().trim();
} else {
tableData[iRow][iColumn] = null;
}
}
}
}
} else {
log.warn("We could not get the content of table declared as: " + this.toString());
}
return tableData;
}
use of org.openqa.selenium.JavascriptExecutor in project ats-framework by Axway.
the class HiddenHtmlTable method getFieldValue.
/**
* Get the value of the specified table field
*
* @param row the field row starting at 0
* @param column the field column starting at 0
* @return the value
*/
@Override
@PublicAtsApi
public String getFieldValue(int row, int column) {
new HiddenHtmlElementState(this).waitToBecomeExisting();
WebElement table = HiddenHtmlElementLocator.findElement(this);
String script = "var table = arguments[0]; var row = arguments[1]; var col = arguments[2];" + "if (row > table.rows.length) { return \"Cannot access row \" + row + \" - table has \" + table.rows.length + \" rows\"; }" + "if (col > table.rows[row].cells.length) { return \"Cannot access column \" + col + \" - table row has \" + table.rows[row].cells.length + \" columns\"; }" + "return table.rows[row].cells[col];";
JavascriptExecutor jsExecutor = (JavascriptExecutor) webDriver;
Object value = jsExecutor.executeScript(script, table, row, column);
if (value instanceof WebElement) {
return ((WebElement) value).getText().trim();
}
return null;
}
use of org.openqa.selenium.JavascriptExecutor in project ats-framework by Axway.
the class HiddenHtmlTable method setFieldValue.
/**
* Set value of specified table field
*
* @param value the new table cell value
* @param row the field row starting at 0
* @param column the field column starting at 0
*/
@Override
@PublicAtsApi
public void setFieldValue(String value, int row, int column) {
new HiddenHtmlElementState(this).waitToBecomeExisting();
WebElement table = HiddenHtmlElementLocator.findElement(this);
String script = "var table = arguments[0]; var row = arguments[1]; var col = arguments[2];" + "if (row > table.rows.length) { return \"Cannot access row \" + row + \" - table has \" + table.rows.length + \" rows\"; }" + "if (col > table.rows[row].cells.length) { return \"Cannot access column \" + col + \" - table row has \" + table.rows[row].cells.length + \" columns\"; }" + "table.rows[row].cells[col].textContent = '" + value + "';";
((JavascriptExecutor) webDriver).executeScript(script, table, row, column);
}
Aggregations