node.jsでSelenium Webdriverを使って自動テストを書いてみようと思い、
適当に検索して↓のコードを書いたのですが、エラーになってしまいました。
Selenium Webdriverのバージョンは4.0.0-alpha.1です。
const {Builder, By, Condition, firefox} = require('selenium-webdriver');
const t = require('selenium-webdriver/testing');
const expect = require('expect.js');
const assert = require('assert');
let driver;
t.describe('user name test', () => {
t.before( () => {
driver = new Builder()
.forBrowser('firefox')
.build();
});
t.after( () => {
driver.quit();
});
t.it('username is required', () => {
driver.get('http://localhost:8080/').then( () => {
driver.wait(until.elementLocated(By.id('user_name')), 2000)
.then( (usernameTextbox) => {
driver.wait(until.elementLocated(By.id('user_name')), 2000)
.then( (button) => {
usernameTextbox.click();
button.click();
driver.wait(until.elementLocated(By.id('user_name_error')), 2000)
.then( (usernameError) => {
let errorText = usernameError.getText();
expect(errorText).to.be('ユーザー名は入力必須です');
});
});
});
});
});
});
TypeError: t.describe is not a function
Selenium Webdriverのソースを確認するとtestingにdescribeが存在しませんでした。
代わりにsuiteというfunctionがあり、suiteを使用したテストの記述方法がコード上の
コメントに記載されていました。その内容を踏まえ以下のように書き直すと、
期待通りの動作となりました。
const {Builder, By, Condition, firefox} = require('selenium-webdriver');
const {suite} = require('selenium-webdriver/testing');
const expect = require('expect.js');
const assert = require('assert');
let driver;
suite((env) => {
describe('user name test', () => {
before(async function () {
driver = await new Builder()
.forBrowser('firefox')
.build();
});
after(() => {
driver.quit();
});
it('username is required', async function () {
await driver.get('http://localhost:8080/');
let usernameTextbox = await driver.findElement(By.id('user_name'));
let button = await driver.findElement(By.id('register_button'));
await usernameTextbox.click();
await button.click();
let userNameError = await driver.findElement(By.id('user_name_error'));
let errorText = await userNameError.getText();
expect(errorText).to.be('ユーザー名は入力必須です');
});
});
});