ラベル マルチブラウザ対応 の投稿を表示しています。 すべての投稿を表示
ラベル マルチブラウザ対応 の投稿を表示しています。 すべての投稿を表示

2014年9月18日木曜日

チェックボックスをクリックする

一覧表示している項目のチェックボックスをクリックしたいとき

例えば、受信箱の一覧表示しているメールの1つで・・・

SeleniumIDEでは、

先頭にフォーカスを当てる場合、focusコマンド、keyコマンドとshiftKeyDown/shiftKeyUpコマンドを組み合わるとチェックONにできます


         ↓

 keyDownコマンドの\32は、スペースキーを押下しています

         ↓



マルチブラウザ対応では、
 
FireFoxではOKでしたが、IEとChromeではNGとなったので、変換コードを下の様に変更しました

if( param.browsertype.equalsIgnoreCase(Consts.TYPEFX) )
{
//FireFoxでは、変換コードそのまま
selenium.focus("//div[@id='lbxdata']");
selenium.shiftKeyDown();
selenium.keyDown("//div[@id='lbxdata']", "\\32");
selenium.shiftKeyUp();
}
else
{
//IEとChromeでは、チェックボックスがOFFの場合にクリックするようにしています
if( !selenium.isElementPresent("xpath=//div[@id='lbxdata']//div[@class='ui-ll clickable ll-even recent ll-selected']") )
{
selenium.click("xpath=//div[@id='lbxdata']//div//div//span");
}
}


2014年9月17日水曜日

ブラウザの実行とSeleniumAPIとの実行時間差の対応

ブラウザ側の処理時間よりSeleniumAPIの方が速い為、SeleniumAPIの方でタイムアウトになる事があります

対処として、setTimeout APIでタイムアウト時間を変更します
デフォルトは30000 msecの設定です

例.
<textarea>に文字列を入力する場合、selenium.type()を実行します
検証として、最大文字数で入力したところ
FireFoxとChromeではデフォルトの実行でOKでしたが、IEではNGとなりました
FireFoxとChromeの文字列入力の様子とIEの文字列入力の様子を見ると、
IEの方が入力に時間がかかっていることが分かります
そこで、selenium.setTimeout()でタイムアウト時間を( 120000 )と設定したところ、IEも実行OKとなりました

※経験上、他の処理でもデフォルト時間ではNGになることが時々、発生したので、マルチブラウザ対応では120000msecに設定してテストするようにしています

pauseコマンド

pauseコマンドは、SeleniumIDEでもマルチブラウザ対応版でも、頻繁に使用しています

ブラウザ側での処理スピードとSeleniumIDEやJavaアプリケーションでの処理スピードに差があって、ブラウザ側の方が遅い為に調整で頻繁に入れています

主に入力コマンドの後、画面キャプチャの後、画面遷移で使用してます

SeleniumIDEで実行する時、遅く感じると思いますが、処理の時間差の対応なので、待ってくださいね

ブラウザによって取得テキストのスペースコードが違う?!

ブラウザによってSeleniumが取得するテキストが違う場合がありました

waitForTableコマンドのJavaへの変換コードは、FireFoxでは実行NGだが、IEではOKChromeNGとなりました

  説明の文字表現:□・・・全角スペース []・・・半角スペース \n・・・改行

SeleniumIDEで、
waitForTable (css=form[name="form_rcv"] > table.6.1, 自動で確認する[]1分間隔□[]3分間隔□[]5分間隔□[]10分間隔□[]15分間隔□[]20分間隔) 

と指定した場合のJavaへの変換コードは下の通り

for (int second = 0;; second++) {
  if (second >= 60) fail("timeout");
  try {
    if ("自動で確認する 1分間隔  3分間隔  5分間隔  10分間隔  15分間隔  20分間隔".equals(selenium.getTable("css=form[name=\"form_rcv\"] > table.6.1"))) break;
  } catch (Exception e) {}
  Thread.sleep(1000);
}

実行NGになったのは、スペースコードの違いでした

対処として、
検証対象の語句間が各ブラウザによって以下のように違う為、ブラウザ判定により検証テキストを指定しました。

検証テキストの内容

[FireFox]
 自動で確認する\n1分間隔\n3分間隔\n5分間隔\n10分間隔\n15分間隔\n20分間隔

[IE]
 自動で確認する[]1分間隔□[]3分間隔□[]5分間隔□[]10分間隔□[]15分間隔□[]20分間隔

[Chrome]
 自動で確認する[]\n[][][][][][][]1分間隔□\n[][][][][][][]3分間隔□\n[][][][][][][]5分間隔□\n[][][][][][][]10分間隔□\n[][][][][][][]15分間隔□\n[][][][][][][]20分間隔□

※どの場合でも上の様な文字列になるかは不明です。文字列を取得できるのに、エラーになる場合にスペースコードを調べてみると良いでしょう。

2014年9月14日日曜日

マルチブラウザ対応版でFireFoxを起動できなくなった?!

マルチブラウザ対応で実行させようとしたら、FireFoxが起動しなくなった。
FireFoxを自動更新に設定にしていたので、使っていたSelenium Serverのバージョンが最新のFireFoxに対応できなくなったようです。
公式サイトから、最新版のselenium-server-standalone-2.43.0.jarをダウンロードしてJavaアプリケーション版の動作OK。

時々、こういうことがあるので、公式サイトを確認してください。

2014年8月28日木曜日

スクリーンショット記録のタイミング

入力タグに何も入力せずにOKボタンを押すと、入力タグに「入力してください」といったメッセージを動的に表示します
この画面を記録するとき、「入力してください」メッセージを表示している間にスクリーンショットを記録するようにタイミングをとります
このタイミングは、個々によって違うので動作しながら調整します

時々css指定できない

SeleniumIDEの右クリックで指定した css指定のlocator を変換したJavaコードで実行すると、時々、locator を認識できずエラーになる
こんなときは xpath指定でやってみる
これまでのところ、この対応でOK - FireFox, IE, Chrome

SeleniumIDE
waitForText css=div.formpad > table > tbody > tr > td  タグ名

変換コード
for (int second = 0;; second++) {
   if (second >= 60) fail("timeout");
    try { if ("タグ名".equals(selenium.getText("css=div.formpad > table > tbody > tr > td"))) break; } catch (Exception e) {}
    Thread.sleep(1000);
  }
css指定でエラーになるので
selenium.getText("xpath=//div[@class='formpad']//table//tbody//tr//td")

これはOK

なぜ、この要素だけ?と思うのだが、理由はわからない

waitFor系でエラーと決める場合は時間かかる

SeleniumコマンドのwaitFor系のJavaコードはエラーと決めるまで時間が掛かるようになっている

例えば

 SeleniumIDEで
   waitForText  id=dialog-caption  タグの管理

 のJavaコードは
   for (int second = 0;; second++) {
    if (second >= 60) fail("timeout");
     try { if ("タグの管理".equals(selenium.getText("id=dialog-caption"))) break; } catch (Exception e) {}
        Thread.sleep(1000);
   }

と変換しているのでエラーと決めるまで時間かかる

ブラウザの実行とプログラムの実行のスピードに差があるので、for文にしてThread.sleep(1000); で、要素がページに表示されるのを待っているのだと思う

ダイアログのまだ表示してない要素をクリックする

ダイアログボックスに表示している項目を編集・削除を行いたいけれどフォーカスが当たっていないときのこと

FireFox、IE、Chrome でのこと

例えば、こんなとき

(項目の緑は文字色・背景色)

SeleniumIDEで作成したとき、

click css=a[name="delete"] > div.ui-act-inner > span.ui-act-label

これだけで削除できた

But!

Javaソースに変換して実行するとエラーになってしまった

Javaソースコード
selenium.click("css=a[name=\"delete\"] > div.ui-act-inner > span.ui-act-label");

ここでエラー発生
com.thoughtworks.selenium.SeleniumException: Element is not currently visible and so may not be interacted with ...

フォーカスが当たっていない為にエラーなので

selenium.click("css=div.el-label");

でフォーカス当てて  



selenium.click("css=a[name=\"delete\"] > div.ui-act-inner > span.ui-act-label");
を実行してOK