2016-10-22 50 views
0

我試圖自動化具有不同公制系統的網站。 該應用程序支持美製公制系統&英制公制系統。 例如:如果我從美國服務器打開應用程序,我會看到英尺&英寸的文本框,&如果我從其他服務器打開相同的應用程序,我會看到釐米級的文本框。無法找到元素 - 使用硒webdriver自動化不同區域設置的網站

我寫我的代碼,以便它首先檢查是否有支腳&英寸的文本框元素存在,如果它存在,那麼它會開始&輸入值在這些文本框,否則,如果腳&英寸不存在,然後在釐米文本框中輸入值。

/* 
* 
* This block is for the values in US version 
* 
*/ 
@FindBy(xpath = ".//*[@id='profile_height_large_value']") 
WebElement CurrentHeightinFeet; 

@FindBy(xpath = ".//*[@id='profile_height_small_value']") 
WebElement CurrentHeightinInches; 

/* 
* This block is for the values in British version 
* 
*/ 

@FindBy(xpath = ".//*[@id='profile_height_display_value']") 
WebElement CurrentHeightinCM; 

而我的代碼來檢查它是否在任一版本如下。

public void userFitnessDetails() { 
    CurrentWeight.sendKeys("70"); 

    if (CurrentHeightinFeet.isDisplayed()) { 
     CurrentHeightinFeet.clear(); 
     CurrentHeightinFeet.sendKeys("5"); 
     CurrentHeightinInches.clear(); 
     CurrentHeightinInches.sendKeys("10"); 
    } 

    CurrentHeightinCM.clear(); 
    CurrentHeightinCM.sendKeys("170"); 
} 

如果我執行上面的代碼中,我得到一個錯誤 - 失敗:註冊 org.openqa.selenium.NoSuchElementException:找不到元素:

{"method":"xpath","selector":".//*[@id='profile_height_large_value']"} 

有人能指導我解決這個?

感謝

回答

1

假設 - 你正在英國的服務器上運行,並與美國英尺長的輸入問題。頁面完全加載並且元素完全可用,所以等待問題不存在。

您將遇到isDisplayed()方法的問題。它用於確定頁面中存在的元素由於樣式屬性顯示設置而不可見,反之亦然。這裏你已經提到了取決於服務器位置的相關html元素是否存在。如果元素不可用,那麼你會看到異常。

您可以使用更安全的driver.findElements()來代替isDiplayed()條件檢查,它會返回一個列表,您可以檢查大小以確定可用性。

+0

我按照您的建議更改了我的代碼,但是,在我的狀況檢查中遇到了問題。 – AdiBoy

+0

@FindBy(xpath =「.//*[@id='profile_height_display_value']」)) \t WebElement CurrentHeightinCM; (@FindBy(id =「profile_goal_weight_display_value」)) \t WebElement GoalWeight;在我的條件檢查中,我使用if(CurrentHeightinFeet.size()> 0 && CurrentHeightinInches.size()> 0)。 \t \t \t CurrentHeightinFeet.sendKeys(「5」); \t \t \t CurrentHeightinInches.clear(); \t \t \t CurrentHeightinInches.sendKeys(「10」); 「 \t \t}」方法sendKeys(字符串)未定義類型列表「 – AdiBoy

+1

您不能在包含WebElements的列表上調用sendKeys。所以當列表大小大於0時,你的條件就會被滿足。您正在查找的元素需要從列表中提取。使用列表上的get(0)方法獲取WebElement。然後使用sendKeys方法。 – Grasshopper