2016-11-29 7 views
2

私はSikuliを自分のSeleniumプロジェクトと統合しました。学ぶために、私はSikuliを使って自動化するための簡単なgmailログインアプリケーションを使用しました。さて、私はスクリプトを実行することができます。さて、私は私のUsernameフィールドに何かを入力しているとしましょう。また、マウスがユーザー名フィールドに移動していないことがあります。私のテストスクリプトは失敗しました。それは断続的な行動です。Sikuliの間欠障害

public static void main(String[] args) throws Exception { 

    Screen screen = new Screen(); 

    Pattern pattern1 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\UserName.PNG"); 
    Pattern pattern2 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\Password.PNG"); 
    Pattern pattern3 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\SignIn.PNG"); 
    Pattern pattern4 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\Next.PNG"); 
    Pattern pattern5 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\SignedIn.PNG"); 
    Pattern pattern6 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\SentMail.PNG"); 
    Pattern pattern7 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\SentMessage.PNG"); 

    System.setProperty("webdriver.chrome.driver","E:\\Projects\\Java\\Demo\\Drivers\\chromedriver.exe"); 
    WebDriver driver = new ChromeDriver(); 
    driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS); 
    driver.navigate().to("https://www.gmail.com"); 
    driver.manage().window().maximize(); 
    screen.type(pattern1,"email id"); 
    screen.click(pattern4); 
    screen.type(pattern2,"password"); 
    screen.click(pattern5); 
    screen.click(pattern3); 
    screen.wait(pattern6,20); 
    screen.click(pattern6); 
    screen.wait(pattern7,5); 
    screen.click(pattern7); 
} 

これはどうして起こるのでしょうか?

+0

screen.type(pattern1,"email id"); 

リファレンスhttp://jsfiddle.netを作成すると同じ問題が発生しますか? – haxxxton

+0

@haxxxton - 自分のコードも更新しました – Aishu

答えて

0

まず、コードを共有してください。

通常、説明したような断続的な動作は、タイムアウトが原因です。あなたがまだ存在しない、あるいはまだ安定していない要素を探していることを意味します。

実際の例では、ページが完全に読み込まれる前にユーザー名フィールドを検出しようとしている可能性があります。両方のツールをどのように使用したかを知ることは有用です。あなたはナビゲーションのために何を使用したのですか?

この問題を解決する最も簡単な方法は、username要素の検索を開始する前に数秒間の遅延を入れることです。それがあなたに役立つかどうかを見てください。今、あなたはあなたのコードを掲載しているときEDIT

は、次の2行を見てみます:ここで

driver.manage().window().maximize(); 
screen.type(pattern1,"email id"); 

を、あなたが見つけるとによって記述要素に入力しようと、すぐにブラウザのウィンドウを最大化し、 pattern1driverインスタンスがウィンドウが最大化されるのを待たずに次のコマンドがすぐに実行を開始するため、これは問題になりそうです。ウィンドウのサイズ変更が完了したことを確認するために、しばらく時間を置いてください。これらの行の間に短い睡眠を追加し、それが役立つかどうかを確認してください。

+0

ここに自分のコードを更新しました。私が言ったように、私はまだ断続的な行動を参照してください – Aishu

+0

@Aishu私の編集を見てください。 –

0

これは断続的に発生し、新しく描画された画面の最初の動作で発生するため、タイミングの問題のようです。
ここでのSikuliソリューションは、使用する前に入力フィールドが利用可能になるまで待つことです。使用する

文は次のとおりです。

wait(pattern1[, seconds]) 

挿入直前に次の場合、このような状況をデバッグする私たちを助けるためにどのようなコードすることができます投稿してください
http://doc.sikuli.org/region.html#Region.wait