Articles of 自动化

puppeteer:无法加载html元素的整个子对象

在puppeteer中,当我想获取元素的子元素时,我可以获取特定属性(innerHtml,childElementCount …)的值,但不是整个子对象: 例如,我可以获得所有表的textContent const data = await page.evaluate(() => { const tables = Array.from(document.querySelectorAll('table')); return tables.map(table => table.textContent) }); console.log(data); //print me [ "\n\t\tselection requirement\n\t\t", "\n\t\Area \n\t\…]" 但是当我想要整个表对象它返回一个数组与空值: const data = await page.evaluate(() => { const tables = Array.from(document.querySelectorAll('table')); return tables; }); console.log(data); // print me [ {}, {}, {}, {}, {}, {}, {}, {}, […]

使用load-grunt-tasks有什么缺点吗?

我最近遇到了负载咕tasks任务的高效魔法,但我想知道为什么它的使用似乎是例外,而不是我见过的大多数例子中的规则。 如果你不熟悉这个模块,它会这样做: 该模块将读取package.json中的dependencies/devDependencies/peerDependencies并加载与提供的模式匹配的grunt任务。 例如,在你的Gruntfile.js中这个混乱: grunt.loadNpmTasks('grunt-shell'); grunt.loadNpmTasks('grunt-sass'); grunt.loadNpmTasks('grunt-recess'); grunt.loadNpmTasks('grunt-sizediff'); grunt.loadNpmTasks('grunt-svgmin'); // and likely many, many more …可以用一个简单的replace: require('load-grunt-tasks')(grunt); 那么,这个单线是否有任何缺点? 如果不是,那为什么它不是在线例子中注册Grunt任务的标准? 我在SO或Googz上找不到任何东西,对Node或Grunt也不是很熟悉,所以对此有所了解。

Gulp:将输出文件写入srcpath的子文件夹相对位置

我试图找出如何编写一个使用PostCSS的Gulp任务,以便它在原始path的postcss子文件夹中输出结果文件。 想象一下你有这些文件: /app/styles/index.css /app/elements/pages/home.css /app/elements/pages/profile.css 你想要Gulp输出postCSS过程: /app/styles/postcss/index.css /app/elements/pages/postcss/home.css /app/elements/pages/potcss/profile.css 这是我目前的configuration,但不起作用: gulp.task('css', function () { return gulp.src([ 'app/styles/index.css', 'app/elements/**/*.css' ], {base: './'}) .pipe(gulp.postcss([require('cssnext')()])) .pipe(gulp.dest('postcss')) }); 事实上,通过configuration文件,Gulp会将所有文件及其相关子目录输出到项目根目录下的一个postcss文件夹中。 任何想法如何解决它? 谢谢!!

自动化ajax生成的网站与噩梦

我使用恶梦来自动化一个网站。 到目前为止,这是非常棒的,但我注意到,当我想与dynamic加载的内容进行交互时,会遇到一些问题。 甚至有一种方法,等待一个元素出现在页面上.wait(#elementId) ,但它不适用于在飞行中生成的内容。 有人遇到过这个问题,或者你可能会推荐一些其他技术? 我喜欢的噩梦是,它实际上并不是无头的,通过与Electron的集成,它也有一个GUI,显示所做的一切。 我宁愿如果这是可能的。 编辑 为了更好地说明我的担忧,下面是我正在使用的代码,但抽象: 假设我想在https://www.google.com上进行search,但search表单是通过库dynamic生成的。 我的代码看起来像这样 vo(function* () { var nightmare = Nightmare({ show: true }); var search = yield nightmare .goto('https://google.com') .wait('input[name="search"]') .type('input[name="search"]', 'the term I am searching for') .click('#submitButton') .wait(2000) .evaluate(function () { return $('input[name="search"]').val(); }); yield nightmare.end(); return search; })(function (err, result) { if (err) return console.log(err); […]

量angular器 – 每次运行后都不能读取未定义属性“headerPrinter”的exception

我真的不知道这个例外的原因是什么,它的副作用是什么。 但是即使所有的testing用例都通过了,每次都会出现。 请帮忙弄清楚如何解决这个问题 – [launcher] Error: TypeError: Cannot read property 'headerPrinter' of undefined at printHeader (C:\automation\tests\node_modules\protractor-console\dist\protractor-console.js:81:8) at C:\automation\tests\node_modules\protractor-console\dist\protractor-console.js:56:19 at [object Object].promise.ControlFlow.runInFrame_ (C:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:1877:20) at [object Object].promise.Callback_.goog.defineClass.notify (C:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:2464:25) at [object Object].promise.Promise.notify_ (C:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:563:12) at Array.forEach (native) at Object.goog.array.forEach (C:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\goog\array\array.js:203:43) at [object Object].promise.Promise.notifyAll_ (C:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:552:16) at goog.async.run.processWorkQueue (C:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\goog\async\run.js:125:21) at runMicrotasksCallback (node.js:337:7) [launcher] Process exited with error code 100 量angular器conf: //-=-=-=- […]

使用API​​响应自动化网站

所以我做了一个使用Instagram API的web应用程序,我找回了两个数组。 1为用户信息,另一个为该地区的照片。 由于访问我们的网站的用户数量,我服务一个静态json文件到服务器,以防止超过我们的API限制,并减less加载时间。 我的问题是,我为一家公司工作,如果我不需要手动运行脚本来生成内容,并将这些内容复制并粘贴到我们的json文件并上传到我们的服务器上,那将会非常好。 我知道的一个“技巧”是创build一个setTimeout(或setInterval)函数来只在一天的特定时间执行内容的实时更新,但是我怎么能做得更好呢? 尝试自动化API响应更新时被认为是最佳实践? 具体来说,该应用程序是写在客户端的JavaScript。 至于服务器端,我知道NodeJS。 我的假设是,我会编写服务器端逻辑来执行此操作,而所有文件最终都会通过FTP上传到我公司的服务器上。

等待Selenium的JavaScript事件

我正在Selenium(Node.js)之上构build一个自动化框架,其中包含许多步骤。 每一步都跟上一个步骤,完成之后,返回一个承诺(像Selenium的driver.click()等)返回的承诺。 是否有可能等待JavaScript事件在浏览器上触发? 如果是这样,那么遵循的模式是什么?

量angular器 – 如果条件元素是可见的如何添加如此跳过这个testing用例否则做下面的动作

我试图给2个替代用例添加一个“if”条件, 第一个是如果它存在用户,所以它应该在屏幕上寻找“idan + free@gmail.com”string,跳到testing用例到下一个, ELSE –执行以下操作。 testing用例 – describe ('Production – New Free Account Test Case', function() { var EC = protractor.ExpectedConditions; var dashboardBtn = element(by.xpath('//div/md-sidenav/f-main-menu/div[1]/ul[1]/li[1]/button/div/div[1]/md-icon')); var noActivation = element(by.linkText("idan+free@gmail.com")); beforeEach(function() { browser.ignoreSynchronization = true; }); afterEach(function() { browser.ignoreSynchronization = false; }); it ('Production – Free Account – Activation', function() { browser.wait(EC.elementToBeClickable(dashboardBtn), 30000); dashboardBtn.click(); browser.wait(EC.visibilityOf(element(by.css("div.task-header.font-smd.task-clickable.ng-binding.flex"))), […]

browser.saveScreenshot(),不创build文件(nodeJS)

我正在使用Appium和web_selenium编写一个Cordova应用程序的自动化testing。 这是我的截图的代码: it("should take screenshot", function() { return browser.contexts() .then(function(cnt){ console.log(cnt[1]); return browser.context(cnt[1]); }) .then(function(){ return browser browser.saveScreenshot("/Users/User/Documents/dev/engineerappcopy/VGimages/nexLogin.png") .sleep(500) }); }); 它通过testing,但没有图像被创build。

上海社会科学院; 如果元素大小大于16px,请更改font-family

我甚至不知道如果这是可能的,我必须带一个RTL版本的网站是LTR ..我使用基金会5与节点和Grunt.Basically一个文件,覆盖原来的ltr文件的一些CSS规则.. 客户要求我; 当元素文本的大小超过16px时,请使用特殊的font-family。由于其他开发人员不断更改sass / css,因此需要一个工具(或SASS公式),以便在部署文件时自动切换字体系列咕噜。 所以,而不是花费大量的时间“扫描”字体大小的整个css / sass文件,并重新创build这些规则与正确的字体家庭..我需要的东西,自动检测是否设置字体大小,然后检查是否大于16px,那么如果是这样,它会改变元素的字体系列。 谢谢