2017-10-16 120 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);