2017-09-29 5 views
0

このトピックに関するGoogleでは多くの情報が見つかりませんでした。以下、私は同じセレンテストから3つの結果を提供しました。異なる場所からテストを実行すると、結果が異なるのはなぜですか?なぜセレンテストは異なるマシンで動作が異なるのですか?

INFO:

だから私たちのアーキテクチャ:のBitbucket、竹ステージ1(QAに、展開の構築)、竹ステージ2(最近展開QAに対するテストからテストを実行し、Amazon EC2インスタンス "テスト" を開始)

  • Chrome Webdriverの使用。
  • 3つのバリエーションのすべてについて、私のアプリケーションが配備されているのと同じQA URLを使用しています。
  • 私はEC2のインスタンスはChromeブラウザでWindows Server 2012 R2を実行しているフィクスチャあたりの並列化可能なすべての試験
  • を実行している私は、試験溶液が適切EC2「テスト」インスタンスにデプロイされたことを確認してきた
  • をインストールしました。実際にはまったく同じ解決策であり、正しく構築されています。

、まずローカル:テストを呼び出すEC2経由SSMスクリプトから

Local Test Run

第二に、:PowerShellスクリプトはそれだろうと同じようnunit3-CONSOLE.EXEを呼び出すこと 注意私の3番目の例ではコマンドラインを使用しています。

On EC2 via SSM

EC2上で最後に、RDPとコマンドラインから実行してテストすること:

RDP on EC2 and run tests from command line

これは私が困惑している...任意の理由はなぜセレンは、マシンごとに異なる実行されています?

+0

エラーとエラーは何ですか? –

+0

場合によってはNoSuchElementExceptionに依存しますが、時にはtrueにする必要があるときにfalseをアサートします。結果は一貫していません。編集:そして、私は同じバージョンのChromeブラウザを実行していることを確認しました。私はそれを私の頭の中に持っています。それはブラウザの問題です。 –

+1

これは、待ち時間に比べてタイムアウトが低すぎたり、明示的に待機していないために発生している可能性があります。ブラウザーが小さすぎるウィンドウで起動している可能性もあります。理由を調べるために調査する必要があります。理由を伝えるためにあなたの投稿に十分な情報がありません。 –

答えて

0

@Florent B.ありがとうございます! powershellスクリプトを使用してリモートで呼び出すと、テストはまだ実行中です。 しかし、、テストはec2インスタンスとマシンの両方で正しく実行されています。

ヘッドレスコマンドスイッチでは、失敗したテストをローカルで複製することができました。

次は、EC2インスタンスでスクリプトを実行しているときに、テスト中にヘッドレスクロムブラウザが使用されていることがわかりました。これは自動的なため、実際に実行されているテストとエラーが有効な場所です。

最後に、私は、それが600/400のサイズに貼り付けたように画面のサイズは(600/400?)確かにそう多くの試行の後、唯一使用可能な画面サイズ

犯人 であることを考え出しましたWindows、C#、ChromeDriver 2のオプションです。ただ、 画面サイズが十分に大きい更新する

ChromeOptions chromeOpt = new ChromeOptions(); 
chromeOpt.AddArguments("--headless"); 
chromeOpt.AddArgument("--window-size=1920,1080"); 
chromeOpt.AddArguments("--disable-gpu"); 
webDriver = new ChromeDriver(chromeOpt); 

FINISHのEDIT:32あなたはあなたのドライバを開始するとき、あなたのwebdriverをオプションを設定することです。それでも問題を解決しようとする

Screen sizes at beginning and end of test

。誰もこれに遭遇した? AWS SSMコマンド - > Powershell - > Start-ProcessでSeleniumテストを実行する - > ElementNotFoundまたはElementNotVisible例外が原因で要素を必要とするテストが失敗します。 POMをテストに使用する。 C#のFindsByフィルタが要素を見つけられません。

EC2でローカルにテストを実行すると、cmd、powershell、およびPowershell ISEから正常に実行されます。

AWS SSMコマンドで実行すると、テストが正しく機能しません。問題を解決するためのリソースが見つかりません。

1

これは本当にコメントであるべきですが、私はまだコメントできません... あなたが確かに言うようにテストしているアプリケーションについては十分にわかりませんが、これはテストのようなものです私が取り組んでいるアプリケーション。

私は2つの問題を見ました。最初に、Seleniumは要素が作成される前に要素をチェックしています。場合によっては動作し、時には失敗することもあります。テストの実行時にページがどのくらい素早く読み込まれるかによって異なります。韻や理由はありません。次に、私がテストしているアプリはかなりばかだ。フィールドをタッチしてデータを入力し、次のフィールドに移動すると、編集可能なすべてのフィールドがデータベースにポストされ、すべてのフィールドが更新されます。そのため、Seleniumは値を入力し、次のフィールドに移動し、古い要素エラーをポップするか、ポスト/リフレッシュサイクルで要素とやりとりするときに、要素エラーを見つけることができません。

私が見つけた解決策は、やや醜いですが、私は待っていましたが、同じ要素名であるため、すでに見えていて、すぐに取り上げられ、古い要素が返されます。結果として、私が見つけた唯一の事は、コール間の明示的な待機を使用することによって、それが正しく一貫して動作することができるということです。以下は、私がテストしているアプリで何をしなければならないかの例です。 (私は、私は私の会社のスタイルマニュアルの中に働いている私は、コードを凝縮できることを承知しています)、この問題が解決しない場合は

Thread.Sleep(2000); 
By nBaseLocator = By.XPath("//*[@id='attr_seq_1240']"); 
IWebElement baseRate = driver.FindElement(nBaseLocator); 
baseRate.SendKeys(Keys.Home + xBaseRate + Keys.Tab); 

は、アプリについて私たちに多くを教えてください、どのように我々はそうすることができます機能しています解決策を見つけるのに役立ちます。

+0

私はPage Object Modelを使用しています。したがって、要素はフィルタで検出されます。 [Selenium C#のPOMを参照](http://executeautomation.com/blog/pom-in-selenium-c/) しかし、私はそれが私の問題だとは思わない。 AWS SSMがEC2インスタンスでテストを実行する方法かもしれません。 EC2でpowershellスクリプトを実行すると、テストは終了しますが、SSM経由で実行すると、ランダムにエラーがスローされます。 「Enable-PSRemoting -Force」を実行しており、リクエストを受信するようにセットアップしています。そして、いくつかのテストは成功します。彼らは窓を開けなければならないが、うまく働く。だから私は負けている。 –

+0

POMを使用しても問題はありません。私はPOMを使用するように自分のコードをリファクタリングしています。 私はここで手足に出掛けるつもりです。私が理解しているように、Seleniumは、テストされているWebアプリケーションとの直接のユーザー対話を複製するように設計されています。基本的に、それはエンドユーザーのためのスタンドとして機能しています。私はSSMにそれを渡すときに何か変わったことが起こっているのだろうかと思います。エンドユーザーのように行動しない場合、SSMはEC2インスタンス上のエージェントなので、私は不思議です。 今、私はあなたがアプリのフロントエンドに接続し、あなたのコンピュータから直接テストした場合にどうなるかと思います。 – Haendler

+0

私は持っています。私は新しいIAMロールを設定し、ローカルコンピュータからそれらを実行しました。失敗する。 EC2にRDPを適用する場合は、PowerShellスクリプトを実行してください。テストは正常に動作します。これは、SSM送信コマンドがどのように実行されているか、またはpowershellのセキュリティ機能により、ヘッドレスブラウザが正しく動作しなくなっています。私は眠りを全面に置く。それは役に立たない。まだ無作為にNoElementExceptionをスローする –

関連する問題