2017-10-12 11 views
0

私は、ウェブページと相互作用し、ファイルをアップロードし、提出し、応答をダウンロードするスクリプトを持っています。最近、ウェブサイトを管理する当事者が何らかの変更を加えました。私は変更に適応しようとしていますが、私は固執する点があります。私はjavaとseleniumを使ってChromeブラウザを開きます。ページが開きます。以前はリセットボタン、アップロードボタン、ファイル選択ボタンの3つのボタンがありました。これは依然として時代の一部です。条件付き自動ウェブ介入

ただし、サイトが開くと、最初の2つのボタンのみが表示されます。アップロードボタンを手動でクリックすると、ページがリフレッシュされ、ファイルの選択ボタンが表示されることがわかりました。私は今これを私のコードに組み込もうとしています。ここに問題のビットがあります...

driver.get("http://apps.gdgps.net/apps_file_upload.php"); 
    System.out.println("test a"); 
    if (driver.findElement(By.cssSelector("input[class*='upfile_ultimo']"))!= null){ 
     System.out.println("test a - passed"); 
     driver.findElement(By.cssSelector("input[class*='upfile_ultimo']")).click(); 
    }else{ 
     System.out.println("test a - failed"); 
     driver.findElement(By.cssSelector("input[id='upload_button']")).click(); 
     driver.findElement(By.cssSelector("input[class*='upfile_ultimo']")).click(); 
    } 

したがって、「テストa」は常に印刷されます。ファイルの選択ボタンがある場合は、 "test a - passed"と表示され、ファイルがアップロードされます。ボタンが表示されていない場合は、「テストa - 失敗」と表示されず、すべてがハングアップします。アップロードボタンは決して押されません。

なぜこれが機能しないのか分かりません。私は、if文の上にupload_button行を移動して実験しました。それは独立して実行されます。 if文に置かれたときには何が違うでしょうか?

答えて

1

要素がnullであることをテストしません。要素が存在するかどうかを確認する場合は、.findElements(複数の点に注意してください)を使用し、返されたコレクションが空であるかどうかをテストします。空の場合、要素は見つかりませんでした。

driver.get("http://apps.gdgps.net/apps_file_upload.php"); 
System.out.println("test a"); 
List<WebElement> upload = driver.findElements(By.cssSelector("input[class*='upfile_ultimo']")); 
if (upload.isEmpty()) 
{ 
    System.out.println("test a - failed"); 
    driver.findElement(By.cssSelector("input[id='upload_button']")).click(); 
    driver.findElement(By.cssSelector("input[class*='upfile_ultimo']")).click(); 
} 
else 
{ 
    System.out.println("test a - passed"); 
    upload.get(0).click(); 
} 
+0

ありがとうございます。あなたのコードは私のものよりもエレガントです。しかし、失敗してもアップロードボタンはクリックされません。しかし、パスはまだうまくいく。 Btw、それは "test a - failed"という印字はしません。これは、if文に否定的な意味を持たず、肯定的なものだけを認識することを意味しますか? – Iakona

+0

最近のこのコードでは、ボタンが常に存在する可能性があります。ページに応じて待機を追加する必要があるかもしれません。 – JeffC

+0

私は最大30分待っています。それはエラーではありません。手動でアップロードボタンをクリックするまで、ただそこにハングアップします。その後、それは上に移動します。 – Iakona