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

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

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

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

selenium

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

Q&A

1回答

1519閲覧

javascript selenium

Nitta

総合スコア96

JavaScript

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

selenium

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

0グッド

0クリップ

投稿2019/09/02 02:20

編集2019/09/02 02:23

お世話になっております。
今、JS(Node.js)で以下のようなボタンをクリックしたいのですが、
出来ません。
お分かりの方居られましたら、ご教示下さい。

html

<div ng-view="" class="ng-scope"><button ng-show="loginButtonGoogleVisible" class="btn btn-primary ng-scope" ng-click="onLogInButtonClick()">Googleでログイン</button>⇒これをクリックしたい。 <button ng-show="loginButtonFacebookVisible" class="btn btn-primary ng-scope" ng-click="loginFacebook()">Facebookでログイン</button> <button ng-show="logoutButtonVisible" class="btn btn-primary ng-scope ng-hide" ng-click="logout()">ログアウト</button></div>

JSコード

driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).build(); driver.get('https://www.furimawatch.net/tool/#!/alert'); var atts = driver.findElement(webdriver.By.class('button.btn.btn-primary.ng-scope')); atts[0].click();

エラー内容

TypeError: Cannot read property 'click' of undefined at C:\Users\k45152001h3\Desktop\Sample2\Test.js:44:11 at Layer.handle [as handle_request] (C:\Users\k45152001h3\Desktop\Sample2\node_modules\express\lib\router\layer.js:95:5) at next (C:\Users\k45152001h3\Desktop\Sample2\node_modules\express\lib\router\route.js:137:13) at Route.dispatch (C:\Users\k45152001h3\Desktop\Sample2\node_modules\express\lib\router\route.js:112:3) at Layer.handle [as handle_request] (C:\Users\k45152001h3\Desktop\Sample2\node_modules\express\lib\router\layer.js:95:5) at C:\Users\k45152001h3\Desktop\Sample2\node_modules\express\lib\router\index.js:281:22 at Function.process_params (C:\Users\k45152001h3\Desktop\Sample2\node_modules\express\lib\router\index.js:335:12) at next (C:\Users\k45152001h3\Desktop\Sample2\node_modules\express\lib\router\index.js:275:10) at C:\Users\k45152001h3\Desktop\Sample2\Test.js:16:2 at Layer.handle [as handle_request] (C:\Users\k45152001h3\Desktop\Sample2\node_modules\express\lib\router\layer.js:95:5)

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

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

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

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

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

guest

回答1

0

findElementするときにオブジェクトがないのでは?
ページの表示を待つような命令を追加してみてはどうでしょうか?

投稿2019/09/02 02:50

sousuke

総合スコア3828

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

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

Nitta

2019/09/02 04:06

返信ありがとうございます。 しかし、うまく行きません。 driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).build(); var url = 'https://www.furimawatch.net/tool/#!/alert'; driver.get(url); const element = webdriver.By.class('button.btn.btn-primary.ng-scope'); driver.wait(url.elementLocated(element)); var atts = driver.findElement(webdriver.By.class('button.btn.btn-primary.ng-scope')); driver.wait(url.elementIsVisible(atts[0]),5000).click(); error ypeError: webdriver.By.class is not a function at C:\Users\k45152001h3\Desktop\Sample2\Test.js:43:37 at Layer.handle [as handle_request] (C:\Users\k45152001h3\Desktop\Sample2\node_modules\express\lib\router\layer.js:95:5) at next (C:\Users\k45152001h3\Desktop\Sample2\node_modules\express\lib\router\route.js:137:13) at Route.dispatch (C:\Users\k45152001h3\Desktop\Sample2\node_modules\express\lib\router\route.js:112:3) at Layer.handle [as handle_request] (C:\Users\k45152001h3\Desktop\Sample2\node_modules\express\lib\router\layer.js:95:5) at C:\Users\k45152001h3\Desktop\Sample2\node_modules\express\lib\router\index.js:281:22 at Function.process_params (C:\Users\k45152001h3\Desktop\Sample2\node_modules\express\lib\router\index.js:335:12) at next (C:\Users\k45152001h3\Desktop\Sample2\node_modules\express\lib\router\index.js:275:10) at C:\Users\k45152001h3\Desktop\Sample2\Test.js:16:2 at Layer.handle [as handle_request] (C:\Users\k45152001h3\Desktop\Sample2\node_modules\express\lib\router\layer.js:95:5)
sousuke

2019/09/02 09:08

ライブラリはなにを使っているのでしょうか https://qiita.com/tonio0720/items/70c13ad304154d95e4bc 仮にこのライブラリだとすれば const { Builder, By, until } = webdriver; このような記述でByを得ないといけないようですが記述が違うようですし 参考ページなどを提示されては? できませんうまくいきませんではどうにもなりません。 クリックする以前にfindElementで要素を取得できたことはあるのでしょうか?
Nitta

2019/09/03 01:16

返信ありがとうございます。 『selenium-webdriver』がライブラリになります。 findElementでの要素を取得できたことはありません。 参照ページは提示されたものと同じです。
Nitta

2019/09/03 02:37

findElementですが、以下のコードでsendkeyに入力できました。 await driver.get('http://www.google.com/ncr'); await driver.findElement(By.name('q')).sendKeys('webdriver'); await driver.wait(until.titleIs('webdriver - Google Search'), 10000); しかし、以下のコードでは下記のようなエラーが出ます。 await driver.get('https://www.furimawatch.net/tool/#!/alert'); let elm1 = await driver.findElement(By.tagName('button')); await elm1[0].click(); (node:896) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'click' of undefined at example (C:\Users\k45152001h3\Desktop\Sample2\Test.js:59:18) at process._tickCallback (internal/process/next_tick.js:68:7) (node:896) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2) (node:896) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問