PC-asobi

Apr 2, 2019 - 1 minute read - Comments

node.jsでSeleniumを動かしたらエラーになった

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('ユーザー名は入力必須です');
          });
      });
  });

Arch LinuxでHaskellをはじめる

comments powered by Disqus