Tag: selenium webdriver

量angular器:logging操作

我已经被要求logging所有量angular器的操作。 东西沿线 console.log(action + " was called with arguments " + args.join(", "); 我的第一个努力是将全局可用的browser.driver包装到一个Proxy对象中,然后在我的testing中使用这个代理对象,并在将调用传递给目标之前logging该操作。 这适用于诸如“get”之类的方法,但是这似乎不捕获诸如click和sendKeys之类的事件。 我尝试在代理中包装全局可用的元素函数,但是这不起作用,只是随机地输出被调用的“全部”方法。 有没有简单的方法来logging所调用的webdriver操作?

selenium:导航到页面之前显示的ManagedPromise :: 32 {]:“pending”}消息

我尝试了以下selenium-webdriverJS代码: var webdriver = require('selenium-webdriver'); var browser = new webdriver.Builder().usingServer().withCapabilities({'browserName': 'chrome' }).build(); browser.get('http://localhost:1091/WebTours/sample.html'); var btn = browser.findElement(webdriver.By.id('show-coordinates')); browser.sleep(3000); var ids = btn.getAttribute("id"); console.log("attributes: " + ids); //expecting to run after above lines. browser.quit(); 预期:导航到给定的URL,find元素,然后打印属性id ,如下所示: attributes: show-coordinates 实际:在导航到URL本身之前,打印attributes:以下消息: attributes: ManagedPromise::32 {[[PromiseStatus]]: "pending"} 环境: Windows 7 – 64 bit selenium-webdriver (installed using `npm install selenium-webdriver`) ChromeDriver […]

无效的定位器错误

我试图在页面对象样式中重写我的testing,但出现了一些问题。 我使用类选项卡,这是我的代码的一部分: var World = require('../support/world.js'); const isAllAjaxRequests = require('../scripts/util').isAllAjaxRequests; const isElementLocatedAndVisible = require('../scripts/util').isElementLocatedAndVisible; module.exports.Tab = class Tab { constructor(data) { this.name = "Base"; this.locators = { 'nextStepIsLocked': {xpath: '//md-tab-item[@aria-selected="true"]//div[@class="cc-status red"]'}, 'isActiveTab': {xpath: '//md-tab-item[@aria-selected="true"]//span[text()="'+ data + '"]'} } } waitForElement(bySelector) { var driver = World.getDriver(); var self = this; //var bySelector = self.locators[bySelector]; return driver.wait(isAllAjaxRequests(driver), […]

seleniumwebdriver:如何显示控制台中的值(Javascript)

我正在使用selenium webdriver node.js(javascript)有没有什么办法在testing运行时控制台输出一些值 。 就像是 : console.log(variable) 而是在testing的控制台中运行。 build议?

xpath上去父母,然后回到孩子

<div class="classA"> <label class="classB"> <span>Referral Date</span> </label> <div> <input class="classC"> </div> </div> 我正在使用xpath来抓取'推荐date'。 这是一个要求,因为用户将传递这个人类可读标签给我。 我知道如何到达那里: //div/label[@class="classB"]/span[text()="Referral Date"] 现在,我需要访问input[@ class =“classC”],以在我的WebDriver自动化中点击它。 我可以做这样的事吗? //div/label[@class="classB"]/span[text()="Referral Date"] /parent::div/div/input[@class="classC"] 那么,这不适合我。 我也试过这个没成功: //div/label[@class="classB"]/span[text()="Referral Date"] /following-sibling::div/input[@class="classC"] 没有工作,我不认为它可以因为跟随兄弟姐妹只是指内的节点。 对?

如何计算multidimensional array中的项目总数?

下面是我用来从我的转发表中检索数据的代码。 这给出了multidimensional array的输出。 请检查输出。 我想获得整个multidimensional array中的项目总数和每个数组中的项目总数。 更详细地说,整个multidimensional array有30个项目,每个数组中有6个项目我想要得到这两个值。 如何计算这两个值? var RepeaterTable = element.all(by.repeater("view in ctrl.view track by $index")).each(function(rowelem,index){ rowelem.getText().then(function(BlockTrans){ console.log("****index and RowElem\n"+index+"\n",BlockTrans); var item = BlockTrans; }); }); 输出上面的代码 0 Morrison Male Jun 22, 2017 26 Yes Edit ****index and RowElem 1 Steven Male Jun 22, 2017 39 Yes Edit ****index and RowElem 2 Emy […]

我如何使用wdio.conf.js文件来指定哪些e2etesting运行的testing文件夹?

我有一个运行在各种不同模式的应用程序。 这些模式完全改变了用户界面,因此每种模式都需要一套完全不同的E2Etesting。 我为每个模式创build了不同的wdioconfiguration文件,并试图为每个模式指定规格,以便它只运行指定的规格。 不幸的是,这是行不通的。 所以现在有三个wdio.conf文件(所有这些文件都是从wdio.conf.js中inheritance的)以及下面的文件夹结构: +–test +–specs +–browser +–modeA +–testFile.js +–modeB +–testFile.js +–wdio.conf.js | +–wdio.conf.modeA.js | +–wdio.conf.modeB.js 我为每个模式创build了npm命令,如下所示: // (package.json) … "tools:e2e": "./node_modules/.bin/wdio wdio/wdio.conf.js", "tools:e2e:modeA": "./node_modules/.bin/wdio wdio/wdio.conf.modeA.js", "tools:e2e:modeB": "./node_modules/.bin/wdio wdio/wdio.conf.modeB.js", … 好的,所以在每个wdio.conf文件中,我指定了一些可能在每种不同模式下都改变的variables(这两个variables都是从wdio.confinheritance的),但是我想更改运行的文件,基本上只指定我只想运行当我运行npm run tools:e2e:modeA ,在modeA的文件夹中的文件,只运行modeB的文件,当我运行npm run tools:e2e:modeB 。 我试图通过在每个conf文件中定义规格来完成这个工作,如下所示: // wdio.conf.js specs: [ './wdio/test/specs/browser/**/*.js' ], – // wdio.conf.modeA.js specs: [ './wdio/test/specs/browser/modeA/*.js' ], exclude: [ './wdio/test/specs/browser/modeB/*.js' […]

selenium – 与类匹配的元素数

我有以下testing代码: it('count elements by class', async t => { let count = await driver.findElements(By.css('my-questions-class')).then(v => v.length); assert.equal(count, 3); // count is 0, but I expect 3 }); 在我的HTML中,显然有一些匹配的元素: <div class="panel panel-default my-questions-class"> 有没有一个很好的理由,为什么Selenium代码不应该拿起这些HTML元素? 我也试过这个select器: By.css('div[class=\'my-questions-class\']') 没有人拿起页面上的任何元素。 但我可以从观察中发现,它正在加载正确的页面,所以不知道这里发生了什么。

覆盖date构造函数执行脚本

我试图使用黄瓜js自动化一些testing,一个是依赖于一个函数调用新的date()。 我试着执行脚本并重写date这样的。 const driver = (this.driver as ThenableWebDriver); await driver.get(`http://localhost:5000/`); await driver.executeScript(` var d = new Date(2012,0,20); Date = function(){return d;} `); 如果我再次调用executeScript函数 await driver.executeScript(` alert(new Date()) // returns the date i set `); 新的date正确返回。 但是,当我模拟点击,并onClick做了一个新的date(),它获取本地date,而不是我设置的date。 任何小费? 提前致谢 [编辑]在这里看到这个: 如何覆盖量angular器testing新的date() var Date = (function() { var OldDate = Date; return function (){ return new OldDate(2012,0,20); […]

如何使用selenium webdriver承诺产量(发电机)?

我正在尝试在node 0.11.x使用生成器,以使我的生活更轻松地编写Seleniumtesting。 我的问题是,我不知道如何正确使用它们。 我几乎100%肯定它必须是一个语法问题。 我使用官方的selenium-webdriver模块(版本2.37.0)和co (版本2.1.0)来创build我的生成器。 这是一个没有发生器/产量魔法的常规testing: driver.isElementPresent(wd.By.css('.form-login')).then(function (isPresent) { console.log(isPresent); // true }); 这里有两个尝试获得与yield / generator magic相同的结果的尝试: var isPresent = yield browser.isElementPresent(wd.By.css('.form-login')); console.log(isPresent); // undefined var isPresent = yield browser.isElementPresent(wd.By.css('.form-login')).then(function (isPresent) { console.log(isPresent); // true }); console.log(isPresent); // undefined 正如你所见, isPresent总是undefined ,除非在promise的callbackisPresent中。 我必须承认,我不太了解发电机或承诺,所以我可能会错过一些非常明显的东西。