ReferenceError : By is not defined - webdriverIO

ReferenceError : By is not defined - webdriverIO

代码:

var assert = require('assert');
describe('webdriver.io api page', function() {
    it('should open login page', function () {
        browser.url('/login');
        browser.pause(10000);
})

it('Should enter login details and submit', function() {

    browser.pause(10000);
    browser.element(By.xpath("//input[@type='text' and @aria-label='user name']")).sendKeys("mikestr");

})
});

我是 webdriverIO 的新手,正在尝试使用 xpath 定位用户名文本框,但它会抛出错误。我环顾了很多 webdriverIO material 但还没有找到解决方案。

定位符必须是字符串

设置值可以使用setValue

browser.setValue("//input[@type='text' and @aria-label='user name']", 'mikestr');

WebdriverIO 的选择器与 Selenium Webdriver 不同。它将接受 "XPath" 或 "CSS" 选择器的字符串值。您看到的 "By is not defined" 错误是因为它正在寻找选择器的 "String" 值。

文档: http://webdriver.io/guide/usage/selectors.html#CSS-Query-Selector

在您的情况下,您只需要传递如下内容:

browser.element('"//input[@type='text' and @aria-label='user name']"')
       .setValue('mikestr')

或者您可以设置变量并传递如下变量:

var XPath = "//input[@type='text' and @aria-label='user name']"
browser.element(XPath).setValue('mikestr')

我在使用 angular 时遇到了不同的问题,但出现了相同的 By is not defined 错误。对于可能会在这里结束的任何其他人,我的解决方案是添加导入

import { By } from "@angular/platform-browser";