2017-10-12 50 views
0

我有一個腳本可以與網頁交互,上傳文件,提交文件並下載響應。最近,控制該網站的一方對此做出了某種改變。我正在嘗試適應變化,但我有一個難點。我使用java和selenium來打開Chrome瀏覽器。該頁面打開。過去有三個按鈕 - 重置按鈕,上傳按鈕和選擇文件按鈕。這仍然是當時的一部分。有條件的自動化網絡互動

但是,有時當站點打開時,只有前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」打印所有的時間。如果選擇文件按鈕存在,我會看到「測試通過」並上傳文件。如果按鈕不存在,我不會看到「測試 - 失敗」,並且所有內容都會掛起。上傳按鈕從不按下。

我不知道爲什麼這不起作用。我通過移動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

謝謝。你的代碼比我的更優雅。不過,它在失敗時仍然不會點擊上傳按鈕。儘管如此,傳球依然奏效。順便說一句,它從不打印「測試 - 失敗」。這是否意味着它不會爲if語句找到否定的結果,而只會認可肯定的結論? – Iakona

+0

在你最近運行這個代碼的時候,按鈕總是在那裏。您可能需要添加一個等待,具體取決於頁面等。 – JeffC

+0

我已經等了30分鐘。它不會出錯。它只是掛在那裏,直到我手動點擊上傳按鈕。然後它繼續前進。 – Iakona