使用 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
有几个问题需要解决:
您的定位器将 return UL
这不是菜单项的数量,而是菜单的数量,即 1。(注意:UL是一个无序列表,LI 是列表项。)您想要包含在您找到的 UL 中的 LI 的计数。
您正在使用 .findElement()
,它将 return 单个元素,或者如果找不到该元素则抛出异常。您需要 .findElements()
(注意 Elements 中的复数形式),然后计算 returned 集合中的项目数。
您正在将计数与 ???字符串“710、51”?我不确定那应该做什么。你反而想要一个 int
, 8.
nav_menu_count.equals(nav_count)
将 WebElement
与 String
进行比较,这是行不通的。
不要尝试编写自己的验证库。调查 Java 的 JUnit 或 TestNG 和 python 的等价物,如果你这样做的话。它会让你的生活更轻松。
现在所有代码都缩减为
List<WebElement> menus = driver.findElements(By.cssSelector("ul.nav > li"));
Assert.assertEquals(menus.size(), 8);
所以我遇到的问题是我正在尝试计算 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
有几个问题需要解决:
您的定位器将 return
UL
这不是菜单项的数量,而是菜单的数量,即 1。(注意:UL是一个无序列表,LI 是列表项。)您想要包含在您找到的 UL 中的 LI 的计数。您正在使用
.findElement()
,它将 return 单个元素,或者如果找不到该元素则抛出异常。您需要.findElements()
(注意 Elements 中的复数形式),然后计算 returned 集合中的项目数。您正在将计数与 ???字符串“710、51”?我不确定那应该做什么。你反而想要一个
int
, 8.nav_menu_count.equals(nav_count)
将WebElement
与String
进行比较,这是行不通的。不要尝试编写自己的验证库。调查 Java 的 JUnit 或 TestNG 和 python 的等价物,如果你这样做的话。它会让你的生活更轻松。
现在所有代码都缩减为
List<WebElement> menus = driver.findElements(By.cssSelector("ul.nav > li"));
Assert.assertEquals(menus.size(), 8);