|
|
@ -495,7 +495,9 @@ class Script: public QObject { |
|
|
|
public: |
|
|
|
public: |
|
|
|
Script(): |
|
|
|
Script(): |
|
|
|
_step(0), _clicktype(JAVASCRIPT_CLICK), |
|
|
|
_step(0), _clicktype(JAVASCRIPT_CLICK), |
|
|
|
_screenshots(true), _defaultTimeout(20) { |
|
|
|
_screenshots(true), |
|
|
|
|
|
|
|
_defaultTimeout(10), |
|
|
|
|
|
|
|
_defaultTimeoutFalse(3) { |
|
|
|
initPrototypes(); |
|
|
|
initPrototypes(); |
|
|
|
} |
|
|
|
} |
|
|
|
Script(const Script& o): |
|
|
|
Script(const Script& o): |
|
|
@ -599,6 +601,7 @@ class Script: public QObject { |
|
|
|
_variables.clear(); |
|
|
|
_variables.clear(); |
|
|
|
_rvariables.clear(); |
|
|
|
_rvariables.clear(); |
|
|
|
_timeout = _defaultTimeout; |
|
|
|
_timeout = _defaultTimeout; |
|
|
|
|
|
|
|
_timeoutFalse = _defaultTimeoutFalse; |
|
|
|
_step = 0; |
|
|
|
_step = 0; |
|
|
|
_clicktype = JAVASCRIPT_CLICK; |
|
|
|
_clicktype = JAVASCRIPT_CLICK; |
|
|
|
} |
|
|
|
} |
|
|
@ -651,7 +654,8 @@ class Script: public QObject { |
|
|
|
bool res(true); |
|
|
|
bool res(true); |
|
|
|
_step = 0; |
|
|
|
_step = 0; |
|
|
|
_testsuites = testsuites; |
|
|
|
_testsuites = testsuites; |
|
|
|
_timeout = _defaultTimeout; // defaults to 20s
|
|
|
|
_timeout = _defaultTimeout; |
|
|
|
|
|
|
|
_timeoutFalse = _defaultTimeoutFalse; |
|
|
|
_ignoreSignalsUntil.clear(); |
|
|
|
_ignoreSignalsUntil.clear(); |
|
|
|
addSignals(frame); |
|
|
|
addSignals(frame); |
|
|
|
_screenshots = screenshots; |
|
|
|
_screenshots = screenshots; |
|
|
@ -929,7 +933,9 @@ class Script: public QObject { |
|
|
|
_variables = o._variables; |
|
|
|
_variables = o._variables; |
|
|
|
_rvariables = o._rvariables; |
|
|
|
_rvariables = o._rvariables; |
|
|
|
_timeout = o._timeout; |
|
|
|
_timeout = o._timeout; |
|
|
|
|
|
|
|
_timeoutFalse = o._timeoutFalse; |
|
|
|
_defaultTimeout = o._timeout; |
|
|
|
_defaultTimeout = o._timeout; |
|
|
|
|
|
|
|
_defaultTimeoutFalse = o._timeoutFalse; |
|
|
|
_clicktype = o._clicktype; |
|
|
|
_clicktype = o._clicktype; |
|
|
|
_testsuites = o._testsuites; |
|
|
|
_testsuites = o._testsuites; |
|
|
|
_testclass = o._testclass; |
|
|
|
_testclass = o._testclass; |
|
|
@ -965,9 +971,18 @@ class Script: public QObject { |
|
|
|
int timeout() { |
|
|
|
int timeout() { |
|
|
|
return _timeout; |
|
|
|
return _timeout; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void timeoutFalse(int t) { |
|
|
|
|
|
|
|
_timeoutFalse = t; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
int timeoutFalse() { |
|
|
|
|
|
|
|
return _timeoutFalse; |
|
|
|
|
|
|
|
} |
|
|
|
void defaultTimeout(int t) { |
|
|
|
void defaultTimeout(int t) { |
|
|
|
_defaultTimeout = t; |
|
|
|
_defaultTimeout = t; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void defaultTimeoutFalse(int t) { |
|
|
|
|
|
|
|
_defaultTimeoutFalse = t; |
|
|
|
|
|
|
|
} |
|
|
|
void auth(const QString& realm, const QString& username, const QString& password) { |
|
|
|
void auth(const QString& realm, const QString& username, const QString& password) { |
|
|
|
if (!username.isEmpty() && !password.isEmpty()) |
|
|
|
if (!username.isEmpty() && !password.isEmpty()) |
|
|
|
_auth[realm] = {username, password}; |
|
|
|
_auth[realm] = {username, password}; |
|
|
@ -1202,7 +1217,9 @@ class Script: public QObject { |
|
|
|
QMap<LenString, LenString> _rvariables; ///< reverse variable mapping
|
|
|
|
QMap<LenString, LenString> _rvariables; ///< reverse variable mapping
|
|
|
|
QMap<QString, std::shared_ptr<Function> > _functions; |
|
|
|
QMap<QString, std::shared_ptr<Function> > _functions; |
|
|
|
int _timeout; |
|
|
|
int _timeout; |
|
|
|
|
|
|
|
int _timeoutFalse; |
|
|
|
int _defaultTimeout; |
|
|
|
int _defaultTimeout; |
|
|
|
|
|
|
|
int _defaultTimeoutFalse; |
|
|
|
ClickType _clicktype; |
|
|
|
ClickType _clicktype; |
|
|
|
QString _targetdir; |
|
|
|
QString _targetdir; |
|
|
|
std::shared_ptr<xml::Node> _testsuites; ///< only valid within run
|
|
|
|
std::shared_ptr<xml::Node> _testsuites; ///< only valid within run
|
|
|
@ -1664,8 +1681,7 @@ class Not: public Command { |
|
|
|
Logger log(this, script); |
|
|
|
Logger log(this, script); |
|
|
|
QString selector(script->replacevars(_selector)); |
|
|
|
QString selector(script->replacevars(_selector)); |
|
|
|
QString text(script->replacevars(_text)); |
|
|
|
QString text(script->replacevars(_text)); |
|
|
|
QWebElement firstelement(find(frame, selector, |
|
|
|
QWebElement firstelement(find(frame, selector, script->timeoutFalse()-1)); |
|
|
|
mrw::max(mrw::min(script->timeout()/3, 10), 2))); |
|
|
|
|
|
|
|
for (QWebElement element: frame->findAllElements(selector)) { |
|
|
|
for (QWebElement element: frame->findAllElements(selector)) { |
|
|
|
if (text.isEmpty()) |
|
|
|
if (text.isEmpty()) |
|
|
|
error(log, AssertionFailed("element must not exists: "+selector)); |
|
|
|
error(log, AssertionFailed("element must not exists: "+selector)); |
|
|
@ -1979,7 +1995,7 @@ class Timeout: public Command { |
|
|
|
return |
|
|
|
return |
|
|
|
tag()+" <seconds>" |
|
|
|
tag()+" <seconds>" |
|
|
|
"\n\n--\n\n" |
|
|
|
"\n\n--\n\n" |
|
|
|
"Set the timeout in seconds (defaults to 10)."; |
|
|
|
"Set the timeout in seconds."; |
|
|
|
} |
|
|
|
} |
|
|
|
QString command() const { |
|
|
|
QString command() const { |
|
|
|
return tag()+" "+_timeout; |
|
|
|
return tag()+" "+_timeout; |
|
|
@ -1997,6 +2013,47 @@ class Timeout: public Command { |
|
|
|
if (!ok) error(log, BadArgument(script->replacevars(_timeout) |
|
|
|
if (!ok) error(log, BadArgument(script->replacevars(_timeout) |
|
|
|
+" should be a number of seconds")); |
|
|
|
+" should be a number of seconds")); |
|
|
|
script->timeout(timeout); |
|
|
|
script->timeout(timeout); |
|
|
|
|
|
|
|
script->defaultTimeout(timeout); |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
private: |
|
|
|
|
|
|
|
QString _timeout; |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TimeoutFalse: public Command { |
|
|
|
|
|
|
|
public: |
|
|
|
|
|
|
|
QString tag() const { |
|
|
|
|
|
|
|
return "timeout-false"; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
QString description() const { |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
tag()+" <seconds>" |
|
|
|
|
|
|
|
"\n\n--\n\n" |
|
|
|
|
|
|
|
"Set the timeout for negative testcases in seconds." |
|
|
|
|
|
|
|
" Time to wait until a negative testcase is accepted. It is used in" |
|
|
|
|
|
|
|
" commands such as not, if or while, where a fail is the expected or at" |
|
|
|
|
|
|
|
" least a valid result. Normally, this timeout can be lower than the" |
|
|
|
|
|
|
|
" normal timeout. This is, because to verify that something does not" |
|
|
|
|
|
|
|
" exists, the test run has always to wait for the full timeout. So" |
|
|
|
|
|
|
|
" setting this to a lower value increases the speed of the test run."; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
QString command() const { |
|
|
|
|
|
|
|
return tag()+" "+_timeout; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
std::shared_ptr<Command> parse(Script*, QString args, |
|
|
|
|
|
|
|
QStringList&, QString, int, int) { |
|
|
|
|
|
|
|
std::shared_ptr<TimeoutFalse> cmd(new TimeoutFalse()); |
|
|
|
|
|
|
|
cmd->_timeout = args; |
|
|
|
|
|
|
|
return cmd; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
bool execute(Script* script, QWebFrame*) { |
|
|
|
|
|
|
|
Logger log(this, script); |
|
|
|
|
|
|
|
bool ok; |
|
|
|
|
|
|
|
int timeout(script->replacevars(_timeout).toInt(&ok)); |
|
|
|
|
|
|
|
if (!ok) error(log, BadArgument(script->replacevars(_timeout) |
|
|
|
|
|
|
|
+" should be a number of seconds")); |
|
|
|
|
|
|
|
script->timeoutFalse(timeout); |
|
|
|
|
|
|
|
script->defaultTimeoutFalse(timeout); |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
private: |
|
|
|
private: |
|
|
@ -2371,8 +2428,7 @@ class If: public CommandContainer { |
|
|
|
QString selector(script->replacevars(_variable)); |
|
|
|
QString selector(script->replacevars(_variable)); |
|
|
|
bool check(false); |
|
|
|
bool check(false); |
|
|
|
if (_cmp=="->") { |
|
|
|
if (_cmp=="->") { |
|
|
|
QWebElement firstelement(find(frame, selector, |
|
|
|
QWebElement firstelement(find(frame, selector, script->timeoutFalse()-1)); |
|
|
|
mrw::max(mrw::min(script->timeout()/3, 10), 2))); |
|
|
|
|
|
|
|
for (QWebElement element: frame->findAllElements(selector)) { |
|
|
|
for (QWebElement element: frame->findAllElements(selector)) { |
|
|
|
if (value.isEmpty() || // just find element
|
|
|
|
if (value.isEmpty() || // just find element
|
|
|
|
element.toOuterXml().indexOf(value)!=-1 || |
|
|
|
element.toOuterXml().indexOf(value)!=-1 || |
|
|
@ -2478,8 +2534,7 @@ class While: public CommandContainer { |
|
|
|
for (bool check(true); check;) { |
|
|
|
for (bool check(true); check;) { |
|
|
|
if (_cmp=="->") { |
|
|
|
if (_cmp=="->") { |
|
|
|
check = false; |
|
|
|
check = false; |
|
|
|
QWebElement firstelement(find(frame, selector, |
|
|
|
QWebElement firstelement(find(frame, selector, script->timeoutFalse()-1)); |
|
|
|
mrw::max(mrw::min(script->timeout()/3, 10), 2))); |
|
|
|
|
|
|
|
for (QWebElement element: frame->findAllElements(selector)) { |
|
|
|
for (QWebElement element: frame->findAllElements(selector)) { |
|
|
|
if (value.isEmpty() || // just find element
|
|
|
|
if (value.isEmpty() || // just find element
|
|
|
|
element.toOuterXml().indexOf(value)!=-1 || |
|
|
|
element.toOuterXml().indexOf(value)!=-1 || |
|
|
@ -2942,8 +2997,7 @@ class Case: public Command { |
|
|
|
log("terminate with default branch"); |
|
|
|
log("terminate with default branch"); |
|
|
|
check = true; |
|
|
|
check = true; |
|
|
|
} else if (condition.cmp=="->") { |
|
|
|
} else if (condition.cmp=="->") { |
|
|
|
QWebElement firstelement(find(frame, selector, |
|
|
|
QWebElement firstelement(find(frame, selector, script->timeoutFalse()-1)); |
|
|
|
mrw::max(mrw::min(script->timeout()/3, 10), 2))); |
|
|
|
|
|
|
|
for (QWebElement element: frame->findAllElements(selector)) { |
|
|
|
for (QWebElement element: frame->findAllElements(selector)) { |
|
|
|
if (value.isEmpty() || // just find element
|
|
|
|
if (value.isEmpty() || // just find element
|
|
|
|
element.toOuterXml().indexOf(value)!=-1 || |
|
|
|
element.toOuterXml().indexOf(value)!=-1 || |
|
|
@ -3283,6 +3337,7 @@ inline void Script::initPrototypes() { |
|
|
|
add(new Set); |
|
|
|
add(new Set); |
|
|
|
add(new UnSet); |
|
|
|
add(new UnSet); |
|
|
|
add(new Timeout); |
|
|
|
add(new Timeout); |
|
|
|
|
|
|
|
add(new TimeoutFalse); |
|
|
|
add(new CaCertificate); |
|
|
|
add(new CaCertificate); |
|
|
|
add(new ClientCertificate); |
|
|
|
add(new ClientCertificate); |
|
|
|
add(new ::ClickType); |
|
|
|
add(new ::ClickType); |
|
|
|