使用 Java 和/或 Python 编写测试 pass/fail 导航菜单中的项目数

write a test to pass/fail the number of items in a Navigation menu using Java and or Python

所以我遇到的问题是我正在尝试计算 https://www.softrams.com/ 的导航菜单中有多少项目(有 8 个) 和逻辑不会正确通过。要么我使用了错误的功能,要么我没有正确编码。

我为此函数构建的代码是

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) Menu count is incorrect

当前您正在 select 菜单栏,单个 WebElement 上的 getSize() 将 return width and height of the rendered element,而不是菜单项的数量。

菜单项具有以下 xpath:

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

有了那个 xpath,select 所有元素,就像有人在评论中建议的那样,并计算这些项目的数量:

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

有几个问题需要解决:

  1. 您的定位器将 return UL 这不是菜单项的数量,而是菜单的数量,即 1。(注意:UL是一个无序列表,LI 是列表项。)您想要包含在您找到的 UL 中的 LI 的计数。

  2. 您正在使用 .findElement(),它将 return 单个元素,或者如果找不到该元素则抛出异常。您需要 .findElements()(注意 Elements 中的复数形式),然后计算 returned 集合中的项目数。

  3. 您正在将计数与 ???字符串“710、51”?我不确定那应该做什么。你反而想要一个 int, 8.

  4. nav_menu_count.equals(nav_count)WebElementString 进行比较,这是行不通的。

  5. 不要尝试编写自己的验证库。调查 Java 的 JUnit 或 TestNG 和 python 的等价物,如果你这样做的话。它会让你的生活更轻松。

现在所有代码都缩减为

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