2017-10-16 121 views
0

因此,我遇到的問題是我正在計算有多少項(有8個)在導航中菜單https://www.softrams.com/和邏輯將無法正確拉動。要麼我使用了錯誤的功能,要麼我沒有正確編碼它。使用Java和or Python編寫測試以在導航菜單中傳遞/失敗項目數

我爲這個函數的代碼是

WebElement nav_menu_count = driver.findElement(By.xpath("//ul[contains(@class,'nav navbar-nav')]")); 
    System.out.println(nav_menu_count.getSize()); 
    String nav_count = "710, 51"; 
    if(nav_menu_count.equals(nav_count)) 
    System.out.println("Menu count is correct"); 
    else 
     System.out.println("Menu count is incorrect"); 

我的控制檯輸出,當我運行這段代碼是:

(710,51)菜單計數是不正確

+0

使用driver.findElements代替(複數形式)並將其存儲在一個列表。然後使用size()來代替。 getSize()會讓你看到第一個菜單的左上角。 – Grasshopper

+1

你不能使用'equals()'來測試一個'WebElement'是否等於'String'。這是比較蘋果和西瓜。 – Kayaman

回答

0

目前您選擇菜單欄,getSize()單WebElement將返回width and height of the rendered element,而不是菜單項的數量。

菜單項有以下XPath:

//ul[contains(@class,'nav navbar-nav')]/li/a 

有了這樣的XPath,選擇所有的元素,就像是有人在意見建議,並獲得這些項目的計數:

List<WebElement> allMenuItems = driver.findElements(
       By.xpath("//ul[contains(@class,'nav navbar-nav')]/li/a")); 
int count = allMenuItems.size(); // should return 8 
0

有幾個問題需要解決的問題:

  1. 您的定位器將返回UL這是不是菜單項的數量,但代替菜單的數量,這是1(注:UL是unorder列表和LIS是列表中的項目。)你想,你位於包含在UL LIS的計數。

  2. 您正在使用.findElement()這要麼返回一個單一的元素或拋出一個異常,如果沒有找到的元素。你想.findElements()(注意複數,在元素小號)再算上返回集合中的項目數。

  3. 你是比較計數的???字符串「710,51」?我不確定那應該做什麼。你不是想要一個int,8

  4. nav_menu_count.equals(nav_count)是一個比較向WebElement一個String這是行不通的。

  5. 不要嘗試寫自己的驗證庫。調查JUnit或TestNG for Java和python的等價物,如果你這樣做的話。它會讓你的生活變得更輕鬆。

現在所有的代碼減少到

List<WebElement> menus = driver.findElements(By.cssSelector("ul.nav > li")); 
Assert.assertEquals(menus.size(), 8);