使用Java和or Python编写测试以在导航菜单中传递/失败项目数
问题描述:
因此,我遇到的问题是我正在计算有多少项(有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)菜单计数是不正确
答
目前您选择菜单栏,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
答
有几个问题需要解决的问题:
您的定位器将返回
UL
这是不是菜单项的数量,但代替菜单的数量,这是1(注:UL是unorder列表和LIS是列表中的项目。)你想,你位于包含在UL LIS的计数。您正在使用
.findElement()
这要么返回一个单一的元素或抛出一个异常,如果没有找到的元素。你想.findElements()
(注意复数,在元素小号)再算上返回集合中的项目数。你是比较计数的???字符串“710,51”?我不确定那应该做什么。你不是想要一个
int
,8nav_menu_count.equals(nav_count)
是一个比较向WebElement
一个String
这是行不通的。不要尝试写自己的验证库。调查JUnit或TestNG for Java和python的等价物,如果你这样做的话。它会让你的生活变得更轻松。
现在所有的代码减少到
List<WebElement> menus = driver.findElements(By.cssSelector("ul.nav > li"));
Assert.assertEquals(menus.size(), 8);
使用driver.findElements代替(复数形式)并将其存储在一个列表。然后使用size()来代替。 getSize()会让你看到第一个菜单的左上角。 –
Grasshopper
你不能使用'equals()'来测试一个'WebElement'是否等于'String'。这是比较苹果和西瓜。 – Kayaman