我正在尝试从登录表单上的错误消息中断言文本,而我正在使用黄瓜来执行此操作。步骤是:
MySqlCommand cmd2;
cmd2 = dbConStr.CreateCommand();
cmd2.CommandText = "INSERT INTO `user` (Loginname, Email, Algo, Stretch, `Hash`, Salt) VALUES ('@loginname', '@email', '@algo', '@stretch','@hash', '@salt');";
cmd2.Parameters.Add("@loginname", MySqlDbType.VarChar).Value = loginname;
cmd2.Parameters.Add("@email", MySqlDbType.VarChar).Value = email;
cmd2.Parameters.Add("@algo", MySqlDbType.VarChar).Value = algo;
cmd2.Parameters.Add("@stretch", MySqlDbType.VarChar).Value = Convert.ToInt32(stretch);
cmd2.Parameters.Add("@hash", MySqlDbType.VarChar).Value = hash;
cmd2.Parameters.Add("@salt", MySqlDbType.VarChar).Value = salt;
MySqlDataReader r2 = cmd.ExecuteReader();
while (r2.Read())
{ }
r2.Close();
这再次使用:
And I expect that element "li.error" contains the text "Your username and password didn't match. Please try again."
这又是在使用:
Then(
/^I expect that (button|element) "([^"]*)?"( not)* contains any text$/,
checkContainsAnyText
};
我得到的错误信息是:
module.exports = (elementType, element, falseCase, expectedText) => {
let command = 'getValue';
if (
elementType === 'button' ||
browser.getAttribute(element, 'value') === null
) {
command = 'getText';
}
/**
* False case
* @type {Boolean}
*/
let boolFalseCase;
/**
* The expected text
* @type {String}
*/
let stringExpectedText = expectedText;
/**
* The text of the element
* @type {String}
*/
const text = browser[command](element);
console.log(text);
if (typeof expectedText === 'undefined') {
stringExpectedText = falseCase;
boolFalseCase = false;
} else {
boolFalseCase = (falseCase === ' not');
}
if (boolFalseCase) {
expect(text).to.not.contain(stringExpectedText);
} else {
expect(text).to.contain(stringExpectedText);
}
页面上的HTML是:
expected '0' to include 'Your username and password didn\'t match. Please try again.'
我无法弄清楚为什么这不起作用,我在相同测试的不同部分使用相同的步骤(以及无数其他测试功能)断言H1元素及其包含的文本,这就像魅力。
如您所见,我添加了一个console.log(文本),以显示使用此测试步骤时找到的文本。在其他步骤中,它向我显示找到的正确文本,但对于此部分,它只返回0