量角器:自定义 ExpectedConditions - 属性更改
protractor: custom ExpectedConditions - on attribute change
我正在尝试实现自定义 ExpectedConditions 方法,该方法将等待元素属性更改。
这是我的解决方案:
const ECC = function() {
/**
* Expect element attribute to have specific value.
*
* @param {ElementFinder} elementFinder
* @param {string} attrName attribute name to check
* @param {string} attrVal attribute value to check for
*
* @return {boolean}
*/
this.attributeToHave = async (elementFinder, attrName, attrVal) => {
const EC = protractor.ExpectedConditions;
const hasAttr = async () => {
const actualText = elementFinder.getAttribute(attrName);
return actualText.indexOf(attrVal) !== -1;
};
return await EC.and(EC.presenceOf(elementFinder), await hasAttr);
};
};
module.exports = new ECC();
在我的 onPrepare
中:
const {expectedConditions} = require('@utils/protractor');
global.ECC = expectedConditions;
最后在我的测试套件中:
await browser.wait(await ECC.attributeToHave(dropdown, 'aria-hidden', 'false'), 3000);
但它一直说 Failed: Wait timed out after 3006ms
,请问我做错了什么?
请进行以下更改后重试:
this.attributeToHave = async (elementFinder, attrName, attrVal) => {
const EC = protractor.ExpectedConditions;
const hasAttr = async () => {
const actualText = await elementFinder.getAttribute(attrName); // should add await
return actualText.indexOf(attrVal) !== -1;
};
return await EC.and(EC.presenceOf(elementFinder), await hasAttr()); // should call `hasAttr()` this function.
};
我正在尝试实现自定义 ExpectedConditions 方法,该方法将等待元素属性更改。
这是我的解决方案:
const ECC = function() {
/**
* Expect element attribute to have specific value.
*
* @param {ElementFinder} elementFinder
* @param {string} attrName attribute name to check
* @param {string} attrVal attribute value to check for
*
* @return {boolean}
*/
this.attributeToHave = async (elementFinder, attrName, attrVal) => {
const EC = protractor.ExpectedConditions;
const hasAttr = async () => {
const actualText = elementFinder.getAttribute(attrName);
return actualText.indexOf(attrVal) !== -1;
};
return await EC.and(EC.presenceOf(elementFinder), await hasAttr);
};
};
module.exports = new ECC();
在我的 onPrepare
中:
const {expectedConditions} = require('@utils/protractor');
global.ECC = expectedConditions;
最后在我的测试套件中:
await browser.wait(await ECC.attributeToHave(dropdown, 'aria-hidden', 'false'), 3000);
但它一直说 Failed: Wait timed out after 3006ms
,请问我做错了什么?
请进行以下更改后重试:
this.attributeToHave = async (elementFinder, attrName, attrVal) => {
const EC = protractor.ExpectedConditions;
const hasAttr = async () => {
const actualText = await elementFinder.getAttribute(attrName); // should add await
return actualText.indexOf(attrVal) !== -1;
};
return await EC.and(EC.presenceOf(elementFinder), await hasAttr()); // should call `hasAttr()` this function.
};