2016-08-25 80 views
1

我在某些特定情況下遇到了一些困難。當div被隱藏時無法找到元素

當沒有錯誤時,頁面如下所示。

<script src="includes/js/errorHandling.js?v=5" type="text/javascript"/> 
<div class="pmo_title"> 
<!--end pmo title--> 
<div class="spacer2"/> 
<div class="pmo-container"> 

但是,如果發生任何錯誤顯示額外的div類。

<script src="includes/js/errorHandling.js?v=5" type="text/javascript"/> 
<div class="pmo_title"> 
<!--end pmo title--> 
<div class="pmo_warning"> 
<div class="pmo-container"> 
<span class="message_title">Errors :</span> 
<!--display first item of list with no comma--> 
<span id="fileError" class="error">File to Upload required</span> 
</div> 
</div> 
<div class="spacer2"/> 
<div class="pmo-container"> 

我想驗證我是否上傳了一個無效文件,並顯示錯誤拋出異常,否則繼續。

我寫了下面的代碼

@FindBy(xpath = "//div[@class='pmo_warning']") 
private WebElement errorMessage; 
if (errorMessage !=null){ 
throw (new IOException("file not found")); 

    } 

return initialize(driver, FileUpload.class); 

它拋出異常的有效和無效輸入

我也曾嘗試

@FindBy(xpath = "//div[@class='pmo_warning']") 
private WebElement errorMessage; 
if (errorMessage.IsDisplayed()){ 
throw (new IOException("file not found")); 

    } 

return initialize(driver, FileUpload.class); 

對於文件沒有錯誤時顯示:

無法羅列美食元素

回答

1

你應該嘗試使用@FindAll獲得清單WebElement改爲檢查其大小如下: -

@FindAll(@FindBy(how = How.CSS, using = "div.pmo_warning")) 
List<WebElement> errorMessage; 

if (errorMessage.size() > 0 && errorMessage.get(0).isDisplayed()){ 
    throw (new IOException("file not found")); 
} 
return initialize(driver, FileUpload.class); 
+0

謝謝它的作品。唯一的問題是Find all會增加等待時間。 – user2410266

+0

爲什麼只需要一個FindBy的FindAll註解? FindAll爲列表中提到的所有FindBy提供OR運算符。看看這個 - http://stackoverflow.com/questions/25914156/difference-between-findall-and-findbys-annotations-in-webdriver-page-factory。您可以刪除FindAll,只需使用帶有單個FindBy批註的列表聲明。 – Grasshopper

+0

@Grasshopper FindBy只是返回單個WebElement,可以用FindAllBy代替'@FindAllBy(how = How.CSS,using =「div.pmo_warning」)列表 errorMessage' ..感謝指出...... :) –

3

driver.findElements(By.xpath( 「// DIV [@類= 'pmo_warning']」))。大小()!= 0