我正在使用Javascript,webdriverio(v2.1.2)从内部站点执行一些数据提取.内部站点启用了SSO,因此如果我在其他应用程序上进行了身份验证,则无需登录此应用程序(在企业Intranet应用程序中很常见).我计划实现以下目标,
检查页面上是否存在元素.如果是,那么这是一个登录页面.如果没有,那么它不是登录页面
login = function (username, password) {
if (!browserClientUtil) {
throw "Unable to load browserClientUtil.js";
}
browserClientUtil
.createClient()
.url(_Url)
.title(function (err, res) {
console.log('Title is: ' + res.value);
}) .isExisting('input#login_button.login_button', function (err, isExisting) {
browserClientUtil.getCurrentClient()
.setValue('input#USER.input', username)
.setValue('input#PASSWORD.input', password)
//.saveScreenshot('ultimatixLoginDetails.png')
.click('input#login_button.login_button')
.pause(100);
handlePostLogin();
});
Run Code Online (Sandbox Code Playgroud)
};
这是最好的方法吗?我试图在单独的函数中分离验证登录页面的代码,它不起作用,因为webdriver中的所有内容都作为回调的一部分发生,我不确定我是否以正确的方式执行此操作. 如何从回调中返回,这又是该函数返回的最终值?
login = function (username, password) {
if (!browserClientUtil) {
throw "Unable to load browserClientUtil.js";
}
browserClientUtil
.createClient()
.url(_Url)
.title(function (err, res) {
console.log('Title is: ' + res.value);
});
if(isThisLoginPage()){ …Run Code Online (Sandbox Code Playgroud) 我想要无头地测试,但我不能那样做.
以下代码启动chrome浏览器.不是无头.好.
// test.js
var webdriverio = require('webdriverio');
var options = {
desiredCapabilities: {
browserName: 'chrome'
}
};
webdriverio
.remote(options)
.init()
.url('http://www.google.com')
.title(function(err, res) {
console.log('Title was: ' + res.value);
})
.end();
Run Code Online (Sandbox Code Playgroud)
下面的代码(摩卡测试代码)不启动Chrome浏览器的$ mocha test.js.
无头.NG.
但测试通过了!我不明白这.
我检查了Selenium Server的日志,但它没有显示(左)任何日志.没有踪影.
// test-mocha.js
var expect = require('expect.js');
var webdriverio = require('webdriverio');
var options = {
desiredCapabilities: {
browserName: 'chrome'
}
};
describe('WebdriverIO Sample Test', function () {
it('should return …Run Code Online (Sandbox Code Playgroud) 在Webdriver.io中,有没有办法点击(由它的元素)文本?
例如,某个人点击并打开了一个下拉菜单,现在希望点击并按文本选择所需的元素.
我想通过捕获视口大小的图块来获取完整网页的屏幕截图.这几乎已经完成,但我对承诺很新,我正在寻找正确的方法.
这是我的代码.问题是调用client.execute(...).然后(...)不会在循环迭代之间等待它自己.并且最后的"结束"既不等待之前的'那么',这就是它被评论出来的原因.
...
var client = webdriverio.remote(options);
...
client
...
.then(function() {
var yTile = 0;
var heightCaptured = 0;
while(heightCaptured < documentSize.height) {
var tileFile = 'screenshot-' + yTile + '.png';
client
.execute(function(heightCaptured) {
window.scrollTo(0, heightCaptured);
}, heightCaptured)
.then(function() {
console.log('captured: ' + tileFile);
client.saveScreenshot('./' + tileFile);
return client;
});
heightCaptured += viewportSize.height;
yTile++;
}
})
//.client.end()
;
Run Code Online (Sandbox Code Playgroud)
在这种情况下使用promises的正确方法是什么?
谢谢.
为了测试,我正在加载一个页面并单击一个按钮,我正在使用webdriver.io进行测试 由于页面很重,加载需要一些时间,我希望全局变量browser在单击之前等待几秒钟按钮。
我知道有waitForVisible方法,但还不够好,我仍然不知道 js 是否向按钮添加了单击事件,我正在寻找类似于sleepselenium webdriver 中的方法的东西。
我目前正在使用 webdriverio 为我当前的项目编写自动化测试。问题是我目前工作的公司对安全性非常严格,因此将凭据放在规范文件中是一个很大的问题。我们正在工作的这个项目是一个内部工具,身份验证使用员工的 gmail 帐户,这也是公司使用的所有服务中使用的身份验证。有人可以建议其他方法如何安全地存储我的规范文件可以访问的凭据。谢谢。
我正在尝试使用PhantomJS / Chrome运行webdriverio以加载页面,然后获取窗口对象以与其他脚本一起使用。由于某种原因,我无法获取窗口对象。每当我得到时,我最终都会看到这样的输出:
Title is: XXXXX
{ state: 'pending' }
Run Code Online (Sandbox Code Playgroud)
使用以下脚本:
var webdriverio = require('webdriverio');
var options = {
desiredCapabilities: {
browserName: 'chrome',
logLevel: 'verbose'
}
};
var client = webdriverio.remote(options);
client
.init()
.url('https://xxxx.com')
.waitUntil(function () {
return client.execute(function () {
return Date.now() - window.performance.timing.loadEventEnd > 40000;
}).then(function (result) {
console.log(window);
return window;
});
})
.end();
Run Code Online (Sandbox Code Playgroud)
有谁知道我该如何修复我的代码,以便在页面完全加载后将窗口对象返回到我的NodeJS控制台应用程序?
谢谢!
我在 WebdriverIO 和 mocha 的帮助下启动本机应用程序,但无法与设备通信,但能够启动应用程序但不能与元素交互。
const webdriverio = require('webdriverio');
const androidOptions = require('../../../helpers/caps').androidOptions;
const assert = require('chai').assert;
androidOptions.capabilities.appPackage = "com.google.android.calculator"
androidOptions.capabilities.appActivity = "com.android.calculator2.Calculator"
describe('Create Chrome web session', function () {
let client;
before(async function () {
client = await webdriverio.remote(androidOptions)
});
after(async function () {
await client.deleteSession();
});
it('should create and destroy Android browser session', async function () {
const elem = await $('#digit_2')
elem.waitForDisplayed(3000);
await client.touchClick('digit_2');
});
});
Run Code Online (Sandbox Code Playgroud)
var Mocha = require('mocha'), fs = require('fs');
var mocha …Run Code Online (Sandbox Code Playgroud) javascript mocha.js webdriver-io appium-android webdriver-io-v4
我试图让我的网页的移动版本在 WebdriverIO 中呈现,但加载了桌面版本。
我已经使用的测试脚本如下声明:browser.setWindowSize(width, height);。浏览器以给定width和打开height,但加载桌面网页而不是移动网页
我在测试脚本中使用了以下语句
browser.setWindowSize(411, 823);
? 预期结果:应呈现网站的移动版本
? 实际结果:呈现网站桌面版
selenium selenium-chromedriver selenium-webdriver appium webdriver-io
在 JS 中,如何将日期格式化为 MM/DD/YYYY?
new Date(Date.now() + (8 * 86400000)).toLocaleString().split(',')[0])
returns "12/1/2020"
Run Code Online (Sandbox Code Playgroud)
如何将其格式化为“12/01/2020”?
fromDate:
(new Date(Date.now() + (1 * 86400000)).toLocaleString().split(',')[0]),
toDate:
(newDate(Date.now() + (8 * 86400000)).toLocaleString().split(',')[0])
Run Code Online (Sandbox Code Playgroud)
我希望 fromDate 和 toDate 为:
如果在 MST 下午 5:00 和午夜之间:设置fromDate为tomorrow'sdate ,并设置toDate为tomorrow's date + 7 days
如何比较 currentTime 是否大于当地时间下午 5 点?
let currentTime = new Date().toLocaleTimeString('en-US', {
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false
});
Run Code Online (Sandbox Code Playgroud) webdriver-io ×10
javascript ×6
selenium ×5
mocha.js ×2
appium ×1
callback ×1
es6-promise ×1
node.js ×1
promise ×1
security ×1
webdriver ×1