質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Mocha

Mochaは、JavaScriptのテストフレームワークの一つ。mocha自体にはアサーション機能はなく、ブラウザを使用するフロントエンドのテストや、node.jsを用いたテストの両方に対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

1回答

1161閲覧

getCurrentUrl()がURLを返さずPromise { <pending> }を返す

naop

総合スコア10

Mocha

Mochaは、JavaScriptのテストフレームワークの一つ。mocha自体にはアサーション機能はなく、ブラウザを使用するフロントエンドのテストや、node.jsを用いたテストの両方に対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2018/10/13 16:07

以下のようなコードで、ログインの動作テストを記述しています。

ログイン完了後は、ログイン前のページに戻ってくるため、
スタートしたページのURLと、戻ってきたときにgetCurrentUrl()で取得したURLを比較して、
一致すればOKとしようと考えています。

しかし、getCurrentUrl()が返す内容が、
Promise { <pending> }
となっており、最後のassert.equal()でエラーになります。

調べたところ、promiseは並列処理のステータスのようなものらしいということで、
処理の前にsleepを入れて結果が変わるかと思いましたが、ダメでした。
(画面が表示され、sleep中にブラウザのURLが意図しているものに変わっていることを確認しました)

どのようにすればgetCurrentUrl()がURLを返すようになるのでしょうか。

JS自体初心者のため、質問に不足がございましたらご指摘ください。
ご教示のほどお願いいたします。

以下一部抜粋

javascript

1it('ログイン操作', async () => { 2 let startpage = hostname+'/hogehuga/'; 3 //以下、処理が勝手に進まないようにawaitで実行 4 // テスト対象のページへアクセス 5 await driver.get(startpage); 6 //ログインリンクをクリック 7 await driver.findElement(By.xpath('/html/body/header/div[1]/ul/li[1]/a')).click(); 8 //ID・PASSWORDを入力 9 await driver.findElement(By.id('login_username')).sendKeys(usermail); 10 await driver.findElement(By.id('login_password')).sendKeys(userpassword); 11 //ログインボタン押下 12 await driver.findElement(By.xpath('//*[@id="form1"]/div/div[4]/button')).click(); 13 //現在のURLを確認し、ログインが完了し、元のページに戻ったかチェックする。 14 await driver.sleep(5000); 15 assert.equal(driver.getCurrentUrl(), startpage); 16});

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

最後のassert.equal()でエラーになります。

テスト自体も非同期実行に対応していますので、await driver.getCurrentUrl()で取り出した上でassert.equalをかけましょう。

javascript

1assert.equal(await driver.getCurrentUrl(), startpage);

投稿2018/10/13 22:11

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naop

2018/10/13 23:25

ご回答有り難うございます! ご教示頂いた方法で解決いたしました。 助かりました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問