量角器中的自定义浏览器方法
Custom browser methods in protractor
我正在开发一个 typescript 量角器框架,我想添加一个新的点击,以及比原来的改进的 sendkeys 方法,这是我为改进的 click() 想出的:
import {browser, by, ElementArrayFinder, ElementFinder, ExpectedConditions, Key} from 'protractor';
const actionTimeout = 5000;
ElementFinder.prototype.secureClick = function () {
return browser
.wait(ExpectedConditions.elementToBeClickable(this), actionTimeout)
.then(() => browser.executeScript('arguments[0].scrollIntoView();', this.getWebElement()))
.then(() => this.click())
.catch(err => {
throw new Error(`Expected ElementFinder ${this.locator()} to be clickable. ${err.toString()}`);
});
};
当我想导入这个文档时,问题就出现了:
import './secureClick'
export async function myFun() {
await somelocator.secureClick()
}
错误消息:.secureClick() 不是函数
这不是答案,因为我仍然不确定您为什么会遇到问题,但这种方法对我有用,而且写在评论中的时间太长了。
可以看到点击按钮成功了
您的实现显然会略有不同,因为您使用的是控制流而不是 async/await
conf.js
exports.config = {
framework: 'jasmine',
specs: ['../tests/editing-prototype.js'],
SELENIUM_PROMISE_MANAGER: false,
onPrepare: () => {
let { ElementFinder } = require('protractor');
ElementFinder.prototype.newClick = function () {
console.log('new click');
this.click();
}
},
}
编辑-prototype.js
describe("Homepage", function() {
it("Navigate to homepage", async function(){
await browser.get("http://www.angular.io");
await browser.driver.sleep(5000);
await $('.homepage-container a[href="start"]').newClick();
await browser.driver.sleep(5000);
});
});
输出
C:\ProtractorProjects\IssueChecker>node_modules\.bin\protractor configs\conf-2.js
[12:58:01] I/launcher - Running 1 instances of WebDriver
[12:58:01] I/local - Starting selenium standalone server...
[12:58:03] I/local - Selenium standalone server started at http://{ip}/wd/hub
Started
new click
.
1 spec, 0 failures
Finished in 11.642 seconds
上面的代码是正确的,错误是我没有用 ng 启动量角器,我只尝试 运行 香草。
运行宁 npm run *folder*
解决了这个问题。
我正在开发一个 typescript 量角器框架,我想添加一个新的点击,以及比原来的改进的 sendkeys 方法,这是我为改进的 click() 想出的:
import {browser, by, ElementArrayFinder, ElementFinder, ExpectedConditions, Key} from 'protractor';
const actionTimeout = 5000;
ElementFinder.prototype.secureClick = function () {
return browser
.wait(ExpectedConditions.elementToBeClickable(this), actionTimeout)
.then(() => browser.executeScript('arguments[0].scrollIntoView();', this.getWebElement()))
.then(() => this.click())
.catch(err => {
throw new Error(`Expected ElementFinder ${this.locator()} to be clickable. ${err.toString()}`);
});
};
当我想导入这个文档时,问题就出现了:
import './secureClick'
export async function myFun() {
await somelocator.secureClick()
}
错误消息:.secureClick() 不是函数
这不是答案,因为我仍然不确定您为什么会遇到问题,但这种方法对我有用,而且写在评论中的时间太长了。 可以看到点击按钮成功了
您的实现显然会略有不同,因为您使用的是控制流而不是 async/await
conf.js
exports.config = {
framework: 'jasmine',
specs: ['../tests/editing-prototype.js'],
SELENIUM_PROMISE_MANAGER: false,
onPrepare: () => {
let { ElementFinder } = require('protractor');
ElementFinder.prototype.newClick = function () {
console.log('new click');
this.click();
}
},
}
编辑-prototype.js
describe("Homepage", function() {
it("Navigate to homepage", async function(){
await browser.get("http://www.angular.io");
await browser.driver.sleep(5000);
await $('.homepage-container a[href="start"]').newClick();
await browser.driver.sleep(5000);
});
});
输出
C:\ProtractorProjects\IssueChecker>node_modules\.bin\protractor configs\conf-2.js
[12:58:01] I/launcher - Running 1 instances of WebDriver
[12:58:01] I/local - Starting selenium standalone server...
[12:58:03] I/local - Selenium standalone server started at http://{ip}/wd/hub
Started
new click
.
1 spec, 0 failures
Finished in 11.642 seconds
上面的代码是正确的,错误是我没有用 ng 启动量角器,我只尝试 运行 香草。
运行宁 npm run *folder*
解决了这个问题。