量角器中的自定义浏览器方法

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* 解决了这个问题。