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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

selenium

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

Q&A

解決済

1回答

1561閲覧

js webdriverで指定した要素にマウスオーバーする方法

nezuko

総合スコア12

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

selenium

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

0グッド

0クリップ

投稿2019/07/23 05:12

編集2019/07/23 05:41

前提・実現したいこと

javascriptで作成したWebアプリのUIテストを、selenium、mocha、ヘッドレスモードのfirefox を使って作成しています。
マウスオーバーでtdの背景色が変わることをテストしたいのですがうまくいきません。

発生している問題・エラーメッセージ

driver.actions(...).mouseMove is not a function

該当のソースコード

javascript

1var chai = require("chai"); 2const fs = require('fs'); 3const { Builder, By, Key, promise, until } = require('selenium-webdriver'); 4const {promisify} = require('util'); 5const firefox = require('selenium-webdriver/firefox') 6promise.USE_PROMISE_MANAGER = false; 7const assert = chai.assert; 8 9const WAIT_FOR_TIMEOUT = 2500; /* ms */ 10const VIEW_WIDTH = 1024; /* px */ 11const VIEW_HEIGHT = 1100; /* px */ 12 13before(async function() { 14 var firefoxOptions = new firefox.Options(); 15 firefoxOptions.setBinary('C:/Program Files/Mozilla Firefox/firefox'); 16 firefoxOptions.headless(); 17 driver = new Builder().forBrowser('firefox').setFirefoxOptions(firefoxOptions).build(); 18 process.on("unhandledRejection", console.dir); 19 driver.manage().window().setRect({width: VIEW_WIDTH, height: VIEW_HEIGHT}); 20}); 21 22it("マウスオーバーで背景色が変わること", async function() { 23 var el = await driver.findElement(By.id("ID")); 24 await driver.actions().mouseMove(el).perform(); 25}

試したこと

上記のエラーメッセージで色々と調べては見ましたが解決方法を見つけることが出来ませんでした。
よろしくお願いいたします。

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

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

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

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

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

m.ts10806

2019/07/23 05:18

>By.id("ID") 上記でエレメントはきちんと見つけられていますか?
m.ts10806

2019/07/23 05:18

あ、違いますね。その前ですね。
nezuko

2019/07/23 05:29

By.id("ID")で要素は見つけられていました。 その前というのはどの部分のことでしょうか??
m.ts10806

2019/07/23 05:32

mouseMove()の引数であるelがnullだからかなと思ってましたが、 そもそもその前のdriver.actions()にmouseMove()関数がないって言われてるので、それより前の話だったなと。 driverがちゃんと読めているかというところから確認する必要がありそうです
nezuko

2019/07/23 05:43

なるほど、ありがとうございます。 質問では省略しているのですが、他のテスト項目では問題なく動いているのでdriveはちゃんと読めている、という認識でいました。 ソースコードにその辺りも追加させていただきました。
m.ts10806

2019/07/23 05:48

あぁ、やっぱり。スコープの問題かなと思います。 ちょっとこのコードすぐ試せる環境にない(のとJavaScriptでselenium使ったことがない)ので 絶対的にこれというのは言えませんが、before()内でdriver がnewされているのでit()内では未定義なんじゃないかなと。 before()とあるのでおそらく先に実行されるものとは思いますが、グローバルにdriverの変数宣言を置いておくとどうなりますか?
nezuko

2019/07/23 06:03

度々恐れ入ります。 グローバル宣言に変更してみましたが、同じエラーでした…。
m.ts10806

2019/07/23 06:04

なるほど・・ としたら一個一個確認していくしかないですね。 driver driver.actions() までちゃんと取れているか
nezuko

2019/07/23 06:18

driver.actions()までは大丈夫そうでした。.mouseMove(el)を付けるとエラーになりますね…。
guest

回答1

0

自己解決

解決しました!ご丁寧にありがとうございました。

javascript

1const actions = driver.actions(); 2var el = await driver.findElement(By.id("ID")); 3await actions.move({origin: el}).perform(); 4

参考
https://stackoverflow.com/questions/51465187/nodejs-selenium-webdriver-cant-move-mouse-to-a-required-position

https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/lib/input_exports_Actions.html

投稿2019/07/23 09:56

nezuko

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問