diff --git a/src/main/java/pl/labno/bernard/htmlunified/WebClientUtils.java b/src/main/java/pl/labno/bernard/htmlunified/WebClientUtils.java
index f27e747..f57d4c3 100644
--- a/src/main/java/pl/labno/bernard/htmlunified/WebClientUtils.java
+++ b/src/main/java/pl/labno/bernard/htmlunified/WebClientUtils.java
@@ -21,51 +21,63 @@ import java.util.Map;
public class WebClientUtils {
private static long defaultCheckInterval = 500;
+
private static long defaultTimeout = 10000;
- public static long getDefaultCheckInterval() {
+ public static long getDefaultCheckInterval()
+ {
return defaultCheckInterval;
}
- public static void setDefaultCheckInterval(long defaultCheckInterval) {
+ public static void setDefaultCheckInterval(long defaultCheckInterval)
+ {
WebClientUtils.defaultCheckInterval = defaultCheckInterval;
}
- public static long getDefaultTimeout() {
+ public static long getDefaultTimeout()
+ {
return defaultTimeout;
}
- public static void setDefaultTimeout(long defaultTimeout) {
+ public static void setDefaultTimeout(long defaultTimeout)
+ {
WebClientUtils.defaultTimeout = defaultTimeout;
}
- public static int waitForJSJob(String message, WebClient webClient) {
+ public static int waitForJSJob(String message, WebClient webClient)
+ {
return waitForJSJob(message, webClient, webClient.waitForBackgroundJavaScript(10) - 1);
}
- public static int waitForJSJob(String message, WebClient webClient, int initialJobCount) {
+ public static int waitForJSJob(String message, WebClient webClient, int initialJobCount)
+ {
return waitForJSJob(message, webClient, initialJobCount, defaultTimeout);
}
- public static int waitForJSJob(WebClient webClient, int initialJobCount, int timeout) {
+ public static int waitForJSJob(WebClient webClient, int initialJobCount, int timeout)
+ {
return waitForJSJob(null, webClient, initialJobCount, timeout);
}
- public static int waitForJSJob(String message, WebClient webClient, int initialJobCount, long timeout) {
+ public static int waitForJSJob(String message, WebClient webClient, int initialJobCount, long timeout)
+ {
return waitForJSJob(message, webClient, initialJobCount, timeout, defaultCheckInterval);
}
- public static int waitForJSJob(String message, WebClient webClient, int initialJobCount, int timeout) {
+ public static int waitForJSJob(String message, WebClient webClient, int initialJobCount, int timeout)
+ {
return waitForJSJob(message, webClient, initialJobCount, timeout, defaultCheckInterval);
}
- public static int waitForJSJob(String message, WebClient webClient, int initialJobCount, long timeout, long checkInterval) {
+ public static int waitForJSJob(String message, WebClient webClient, int initialJobCount, long timeout, long checkInterval)
+ {
int jobs;
long startTime = System.currentTimeMillis();
do {
jobs = webClient.waitForBackgroundJavaScript(checkInterval);
if (startTime + timeout < System.currentTimeMillis()) {
- throw new RuntimeException("Number of JavaScript jobs doesn't drop to initial level for " + timeout + " seconds. It's memory leak in your JavaScript rather then request taking so long!");
+ throw new RuntimeException(
+ "Number of JavaScript jobs doesn't drop to initial level for " + timeout + " seconds. It's memory leak in your JavaScript rather then request taking so long!");
}
} while (jobs > initialJobCount);
System.out.println("Waiting" + (message == null ? "" : " for " + message) + " took: " + (System.currentTimeMillis() - startTime) + "ms");
@@ -77,9 +89,11 @@ public class WebClientUtils {
*
* @param suggestion suggestionBox element
* @param column column of suggestionBox to extract text from
+ *
* @return list of suggestions
*/
- public static Map getSuggestions(HtmlElement suggestion, int column) {
+ public static Map getSuggestions(HtmlElement suggestion, int column)
+ {
final Map suggestions = new HashMap();
final HtmlElement suggestElement = suggestion.getElementById(suggestion.getId() + ":suggest");
@SuppressWarnings("unchecked")
@@ -95,7 +109,8 @@ public class WebClientUtils {
return suggestions;
}
- public static void forceWait(int timeout) {
+ public static void forceWait(int timeout)
+ {
final long startTime = System.currentTimeMillis();
do {
try {
@@ -109,7 +124,8 @@ public class WebClientUtils {
} while (startTime + timeout > System.currentTimeMillis());
}
- public static void executeAjaxReRenderedScripts(HtmlPage page) {
+ public static void executeAjaxReRenderedScripts(HtmlPage page)
+ {
final DomNodeList scripts = page.getElementsByTagName("script");
/**
* We cannot iterate over html DomNodeList cause it depends on sibling relationship which we will modify.
@@ -137,14 +153,16 @@ public class WebClientUtils {
}
}
- public static void setColorPickerValue(WebClient webClient, HtmlElement colorPicker, String hex) throws IOException {
+ public static void setColorPickerValue(WebClient webClient, HtmlElement colorPicker, String hex) throws IOException
+ {
HtmlPage page = (HtmlPage) webClient.getCurrentWindow().getEnclosedPage();
colorPicker.click();
((HtmlInput) page.getElementById(colorPicker.getId() + "-colorPicker-hex")).setValueAttribute(hex);
page.getElementById(colorPicker.getId() + "-colorPicker-popup").getHtmlElementsByTagName("button").get(0).click();
}
- public static void setColorPickerValue(WebClient webClient, HtmlElement colorPicker, int red, int green, int blue) throws IOException {
+ public static void setColorPickerValue(WebClient webClient, HtmlElement colorPicker, int red, int green, int blue) throws IOException
+ {
HtmlPage page = (HtmlPage) webClient.getCurrentWindow().getEnclosedPage();
colorPicker.click();
((HtmlInput) page.getElementById(colorPicker.getId() + "-colorPicker-rgb-r")).setValueAttribute(Integer.toString(red));
@@ -154,28 +172,68 @@ public class WebClientUtils {
}
@SuppressWarnings("unchecked")
- public static List getTableRows(HtmlTable table) {
+ public static List getTableRows(HtmlTable table)
+ {
return (List) table.getByXPath(".//*[contains(@class,'rich-table-row')]");
}
+ /**
+ * Checks if a specified cell in given table contains searched text.
+ *
+ * @param table HtmlTable element in which text is searched.
+ * @param cellNumber Number of column of the table in which text is searched.
+ * @param searchedText Text to be searched
+ *
+ * @return True if text was found, false otherwise.
+ */
+ public static boolean contains(HtmlTable table, int cellNumber, String searchedText)
+ {
+ List rows = getTableRows(table);
+ for (HtmlTableRow row : rows) {
+ if (row.getCell(cellNumber).getTextContent().contains(searchedText)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
@SuppressWarnings("unchecked")
- public static List getScheduleEventTitles(HtmlElement schedule) {
+ public static List getScheduleEventTitles(HtmlElement schedule)
+ {
return (List) schedule.getByXPath(".//*[@class='fc-event-title']");
}
- public static void switchScheduleToNextMonth(HtmlElement schedule) throws IOException {
+ public static void switchScheduleToNextMonth(HtmlElement schedule) throws IOException
+ {
((HtmlElement) schedule.getByXPath(".//*[contains(@class,'fc-button-next')]").get(0)).click();
}
+ public static void switchScheduleToMonthlyView(HtmlElement schedule) throws IOException
+ {
+ ((HtmlElement) schedule.getByXPath(".//*[contains(@class,'fc-button-month')]").get(0)).click();
+ }
+
+ public static void switchScheduleToWeeklyView(HtmlElement schedule) throws IOException
+ {
+ ((HtmlElement) schedule.getByXPath(".//*[contains(@class,'fc-button-agendaWeek')]").get(0)).click();
+ }
+
+ public static void switchScheduleToDailyView(HtmlElement schedule) throws IOException
+ {
+ ((HtmlElement) schedule.getByXPath(".//*[contains(@class,'fc-button-agendaDay')]").get(0)).click();
+ }
+
/**
* IMPORTANT: Because of bugs in htmlunit and jsfunit which make schedule component render improperly this method should be used only to retrieve
* cell elements from the first row of schedule grid. Any operations on cell elements from other rows are likely to cause error.
*
* @param schedule schedule element
* @param dayOfMonth number of day of month representing cell you wish to retrieve
+ *
* @return list of schedule cells
*/
- public static HtmlTableDataCell getScheduleDayCell(HtmlElement schedule, int dayOfMonth) {
+ public static HtmlTableDataCell getScheduleDayCell(HtmlElement schedule, int dayOfMonth)
+ {
return (HtmlTableDataCell) schedule.getByXPath(".//td[contains(@class,'fc-day') and not(contains(@class,'fc-other-month'))]").get(dayOfMonth - 1);
}
}