SeleniumBasicでGoogleChromeDirverを使用してInputにテキストをsendkeysするとSelenium Error Elements not Interactiveになる

1,868 views
Skip to first unread message

Takeshi Ueshima

unread,
Feb 22, 2020, 1:28:03 AM2/22/20
to 日本Seleniumユーザーコミュニティ
VBAよりLineNotifyのトークン登録を実施しています。
トークン発行にトークン名の入力項目があり、Snedkeysで掲載のエラーになります。

LineNotifyのトークン登録はは以下の通りです。

<section id="FnAccessToken" class="ArCont01">
  <input type="hidden" name="_csrf" value="208cba1d-da05-4d14-8d9a-7809e0628ffb">
  <header class="MdMN01Head">
    <h2 class="mdMN01Ttl">アクセストークンの発行(開発者向け)</h2>
    <p class="mdMN01Desc">パーソナルアクセストークンを利用することで、Webサービスの登録をせずに通知を設定することができます。</p>
  <!--/MdMN01Head--></header>
  <div class="MdMN03BtnSet mdMN03Type01">
    <ul class="mdMN03Ul">
      <li class="mdMN03Li"><a href="#" class="MdBtn01P02">トークンを発行する</a></li>
      <li class="mdMN03Li"><a href="/doc/" class="MdBtn01P03">LINE Notify API Document</a></li>
    </ul>
  <!--/MdMN03BtnSet--></div>
  <div class="MdOverlay01" style="">
    <div class="MdMN99Layer mdMN99Type01">
      <a href="#" class="mdMN99Close">閉じる</a>
      <div>
        <p class="mdMN99Ttl">トークンを発行する</p>
        <div class="MdForm01">
          <p class="mdForm01Label">トークン名を記入してください (通知の際に表示されます)</p>
          <div class="MdInputTxt01"><input type="text" placeholder="20文字以内で入力してください。" maxlength="20"></div>
            <p class="mdForm01ErrorTxt">トークン名は20文字以内で入力してください。</p>
        <!--/MdForm01--></div>

この中の
  div class="MdInputTxt01"
に書き込もうとしています。VBAでは以下のように記載しています。

 driver.FindElementByClass("MdInputTxt01").SendKeys "xxxx"    ' トークン名

この行で掲題のエラーが発生します。
回避方法を探していますが、見つかりません。
どなたかお分かりになる方いらっしゃらないでしょうか。

Takeshi Ueshima

unread,
Feb 23, 2020, 7:39:07 PM2/23/20
to 日本Seleniumユーザーコミュニティ
不具合の発生するElementに対していかのようにクリクすると、問題は発生しません。
  driver.FindElementByClass("MdInputTxt01").click    ' トークン名
Snedkeys で不具合が発生するのか、理解に苦しんでいます。

伊藤望

unread,
Feb 23, 2020, 8:44:10 PM2/23/20
to 日本Seleniumユーザーコミュニティ
伊藤です。

MdInputTxt01はdiv要素なのでテキスト入力を受け付けません。
CSSロケータの #MdInputTxt01 > input などを使い、その下のinput要素に対し入力を行えばうまくいくと思います。

Takeshi Ueshima

unread,
Feb 24, 2020, 1:28:04 AM2/24/20
to 日本Seleniumユーザーコミュニティ


2020年2月24日月曜日 10時44分10秒 UTC+9 伊藤望:
伊藤です。

MdInputTxt01はdiv要素なのでテキスト入力を受け付けません。
CSSロケータの #MdInputTxt01 > input などを使い、その下のinput要素に対し入力を行えばうまくいくと思います。

ご回答ありがとうございます。
 
  CSSロケータを変更するとは具体的にどのようにすればよいでしょうか。
  

伊藤望

unread,
Feb 24, 2020, 3:58:37 AM2/24/20
to 日本Seleniumユーザーコミュニティ
FindElementByClassをFindElementByCssにし、引数も変更します。

が参考になると思います。

Takeshi Ueshima

unread,
Feb 24, 2020, 5:03:11 AM2/24/20
to 日本Seleniumユーザーコミュニティ
有難うございます。
今までCSSロケータを探したことが無かったのでおたずねいたしました。
これよりCSSを調査いたします。
結果が分かりましたら報告させていただきます。
宜しくお願いします。

Takeshi Ueshima

unread,
Feb 24, 2020, 7:46:07 AM2/24/20
to 日本Seleniumユーザーコミュニティ
該当するCSSよりMdInputTxt01を探したところ、以下の通りでした。
教えて頂いた「その下のinput要素」が見つからないようです。
どの様にすればよいかお分かりになりますでしょうか。

.MdInputTxt01 input {
  width: 100%;
  height: 25px;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  background: transparent;
  color: #000000;
  font-size: 16px;
  font-weight: bold;
  padding: 0;
}
.MdInputTxt01 ::-webkit-input-placeholder {
  color: #c8cacf;
  font-weight: 300;
}
.MdInputTxt01 ::-moz-placeholder {
  color: #c8cacf;
  font-weight: 300;
}
.MdInputTxt01 :-ms-input-placeholder {
  color: #c8cacf;
  font-weight: 300;
}
.MdInputTxt01.mdInputTxt01Read input {
  color: #f44117;
  font-size: 20px;
  text-align: center;
}
.MdInputTxt01.mdInputTxt01Sr {
  position: relative;
  height: 66px;
  padding-top: 20px;
  padding-left: 63px;
}
.MdInputTxt01.mdInputTxt01Sr::before {
  content: "";
  position: absolute;
  top: 21px;
  left: 27px;
  width: 23px;
  height: 22px;
  background-position: -124px -67px;
}

藤田光

unread,
Feb 24, 2020, 8:09:37 AM2/24/20
to 日本Seleniumユーザーコミュニティ
横から失礼します。

clickすることで、中のinputにフォーカスが合わさったんじゃないですかね

driver.FindElementByXpath('//div[@class=MdInputTxt01]/input[@type=text]').SendKeys

xpathでも良いのであれば、こんな感じではいかがでしょうか?

2020年2月24日月曜日 9時39分07秒 UTC+9 Takeshi Ueshima:

タカミテツロウ

unread,
Feb 24, 2020, 9:40:53 AM2/24/20
to 日本Seleniumユーザーコミュニティ
検証できておりませんが

Set elem = driver.FindElementByClass("MdInputTxt01")
Set elem2 = elem.FindElementsByTag("input")(1)
elem2.Clear
elem2.SendKeys "xxxx"     ' トークン名


とか

Javvascriptを使って

driver.ExecuteScript ("document.getElementsByClassName('MdInputTxt01')[0].children[0].value='xxxx'")

では 如何でしょうか?

2020年2月24日(月) 15:28 Takeshi Ueshima <tueshi...@gmail.com>:
--
このメールは Google グループのグループ「日本Seleniumユーザーコミュニティ」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには seleniumjp+...@googlegroups.com にメールを送信してください。
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/seleniumjp/7f5b59cc-37dc-418e-b4c1-6d0860441e07%40googlegroups.com にアクセスしてください。

Takeshi Ueshima

unread,
Feb 24, 2020, 7:46:03 PM2/24/20
to 日本Seleniumユーザーコミュニティ


2020年2月24日月曜日 22時09分37秒 UTC+9 藤田光:
ご指摘の方法でSendkyesできました有難うございます。
VBAですので以下のように変更しています。

 driver.FindElementByXpath(”//div[@class=’MdInputTxt01']/input[@type='text']").SendKeys

Takeshi Ueshima

unread,
Feb 24, 2020, 7:47:24 PM2/24/20
to 日本Seleniumユーザーコミュニティ


2020年2月24日月曜日 23時40分53秒 UTC+9 タカミテツロウ:
検証できておりませんが

Set elem = driver.FindElementByClass("MdInputTxt01")
Set elem2 = elem.FindElementsByTag("input")(1)
elem2.Clear
elem2.SendKeys "xxxx"     ' トークン名


とか

Javvascriptを使って

driver.ExecuteScript ("document.getElementsByClassName('MdInputTxt01')[0].children[0].value='xxxx'")

では 如何でしょうか?

ご連絡頂き有難うございます。
先ほど別の方より頂戴した情報で解決できました。
今後ともよろしくお願いします。 

藤田光

unread,
Feb 24, 2020, 10:57:21 PM2/24/20
to 日本Seleniumユーザーコミュニティ
解決できたとのこと良かったです:)

Takeshi Ueshima

unread,
Feb 25, 2020, 7:59:53 AM2/25/20
to 日本Seleniumユーザーコミュニティ
ありがとうございました。
Reply all
Reply to author
Forward
0 new messages