Time Execution #
This custom command measures and reports execution time of some lambda expresion. It allows timing the execution of some flow in a website, e.g., logging in, checking out in an e-commerce site, joining a WebRTC call. Results from this command can be used in post-run analysis.
timeExecution(String name, Command command, int timeout)
timeExecution(String name, Command command)
name
- unique identifying name for the command
function. If name
is an
empty string, then name
will default to "anonymous"
. If name
is provided
then the maximum length for this argument is 150 characters and can only contain
alphanumeric characters, underscores and hyphens.
command
- function whose execution will be timed. command
must be a lambda
expression. command
is a functional interface Command
.
@FunctionalInterface
public interface Command {
void execute();
}
timeout
- specifies the time in seconds, how long to wait for the command
to
execute. Timeout value cannot be negative. If the execution time exceeds the
timeout
value, then an error will be thrown. If timeout
parameter is omitted
or 0, then no limit on the execution time of command
is placed.
Use of the timeExecution
custom command will produce a log that contains
timing information of the timedCommand
. The log message structure is shown
bellow.
[LOADERO] Execution time for '${NAME}': ${DURATION}ms (start: ${START}; end: ${END}).
${NAME}
has the value that was supplied totimeExecution
name
parameter.${DURATION}
is the execution time in milliseconds of thecommand
function.${START}
,${END}
are Unix timestamp values in milliseconds.
public void testUIWithLoadero() {
int reallyLongPause = 5 * 60 * 1000; // 5 minutes
open("https://duckduckgo.com/");
// Example of timing execution without specifying a timeout.
timeExecution(
"locate_search_bar_and_wait",
() -> {
E(byCssSelector("#search_form_input_homepage"))
.waitFor(10)
.untilIsVisible()
.sendKeys("loadero");
E(byCssSelector("#search_button_homepage"))
.waitFor(10)
.untilIsVisible()
.click();
E(byCssSelector("#r1-0 > div > h2"))
.waitFor(10)
.untilIsVisible();
sleep(reallyLongPause);
}
);
}
public void testUIWithLoadero() {
open("https://duckduckgo.com/");
// Example of timing execution with a timeout.
timeExecution(
"locate_search_bar",
() -> {
E(byCssSelector("#search_form_input_homepage"))
.waitFor(10)
.untilIsVisible()
.sendKeys("loadero");
E(byCssSelector("#search_button_homepage"))
.waitFor(10)
.untilIsVisible()
.click();
E(byCssSelector("#r1-0 > div > h2"))
.waitFor(10)
.untilIsVisible();
},
10
);
}