javascript - 量角器:未选择仪表板过滤器
问题描述
我正在使用 Protractor 为我的 Qlik 仪表板进行一些自动化 UI 测试。当前使用此示例仪表板运行一些测试。我打算尝试不同的过滤器组合,看看是否有任何仪表板图表无法呈现。
对于示例仪表板,我打算只单击页面顶部的 4 个过滤器中的每一个,然后选择第一个选项。
出于某种原因,我无法让量角器为我选择过滤器。我总是收到超时错误。
我尝试使用 browser.driver 而不是默认浏览器。我意识到我必须使用 browser.driver.get('url') 否则页面将无法加载。我不知道为什么会这样。
下面显示的是我当前的代码:
describe('Qlik Dashboard Test', function() {
it('Primary Filter Testing',function(){
var url = 'https://sense-demo.qlik.com/sso/sense/app/dcb7c95a-9ecd-43e2-8786-cae00108a324/sheet/54b60312-68c5-4d92-a225-79326b68ad5a/state/analysis';
var EC = protractor.ExpectedConditions;
// Reference to all filters
var filter = element.all(by.className('title ng-binding'));
// Reference to first option in each filter
var first_opt = element(by.repeater('textItem in item.textItems'));
// Reference to backbutton
var bb = element.all(by.className('lui-clear-all lui-icon lui-icon--remove'));
// Go to website
browser.driver.get(url);
// Wait for all filters to be visible
browser.wait(EC.visibilityOf(filter , 10000));
// Click on each filter, and select the first avaiable option
filter.each(function(main_filter){
browser.actions().mouseMove(main_filter).click().perform().then(function(){
browser.driver.wait(EC.visibilityOf(first_opt,15000));
}).then(function(){
browser.actions().mouseMove(first_opt).click().perform();
});
});
// Click on back button
bb.each(function(backbutton){
browser.actions().mouseMove(backbutton).click().perform();
}).then(function(){
browser.sleep(2000);
});
})
})
这是我不断收到的错误消息:
Failed: script timeout: result was not received in 11 seconds
(Session info: chrome=71.0.3578.98)
(Driver info: chromedriver=2.45.615355 (d5698f682d8b2742017df6c81e0bd8e6a3063189),platform=Mac OS X 10.14.0 x86_64)
任何帮助将不胜感激!
解决方案
设法让它与这个一起工作:
describe('Qlik Dashboard Test', function () {
it('Primary Filter Testing', async function () {
await browser.waitForAngularEnabled(false);
var url = 'https://sense-demo.qlik.com/sso/sense/app/dcb7c95a-9ecd-43e2-8786-cae00108a324/sheet/54b60312-68c5-4d92-a225-79326b68ad5a/state/analysis';
var EC = protractor.ExpectedConditions;
var rain = element(by.className('rain rain-loader qv-block-ui ng-scope qv-fade-out'));
// Reference to all filters
var filters = element.all(by.css('.title-wrapper'));
// Reference to backbutton
var bb = element.all(by.className('lui-clear-all lui-icon lui-icon--remove'));
// Go to website
await browser.get(url);
await browser.wait(EC.presenceOf(filters,15000));
await browser.wait(EC.invisibilityOf(rain,15000));
// Wait for all filters to be visible
let numFilter = await filters.count();
console.log(numFilter);
for (let i = 0; i < numFilter; i++) {
await filters.get(i).click();
// Reference to first option in each filter
var first_opt = element(by.repeater('textItem in item.textItems'));
var all_opt = element.all(by.repeater('textItem in item.textItems'));
await browser.wait(EC.presenceOf(first_opt, 15000));
const text = all_opt.get(1).getText();
console.log(text);
await first_opt.click();
await browser.sleep(1000);
}
},120000)
})
感谢 DublinDev 提出的同步/异步建议,确实让编写测试变得更加容易。
还编辑了测试的默认预期持续时间,似乎太短了。
似乎有一个 ui 阻塞组件(请参阅 rain 变量),它会阻塞 UI,直到所有内容都加载完毕,所以您只需要等待过滤器在 DOM 中可见,并且 UI 阻塞器消失,然后它'会工作的。
推荐阅读
- php - 错误 405 - 不允许 | Wordpress 网站托管在 github 页面上,Xampp 服务器位于本地计算机上
- react-select - React-Select 返回值而不是整个选项对象
- python - 我无法安装此存储库
- python - AttributeError:“str”对象没有属性“float”
- c# - 在 layout.cshtml 中实现多个部分
- java - 如何计算 MongoDB Java 集合中的文档?
- three.js - 在 Three.js 中,IconsaHedron 中的某些面没有应用不透明度
- java - Jenkins 插件或选项来长期报告重复失败的测试
- java - 我想以一个字符只重复一次的方式修剪一个字符串
- react-native - React native 0.61.5 Build 在 Xcode 12.5 beta 上失败