我正在尝试检查页面上是否存在具有给定类的DIV
。这里的测试团队使用的模式是找到元素,说出预期然后做一个简单的if-else,如下所示(仅用于解释下面的布局)。
如果我从.ToString()
的末尾删除var topNavClassName assignment
,则if
语句报告Operator '=='
中的相等性检查不能应用于{{1}类型的操作数}}
但是当保持并运行代码时,Write-line会返回: 错误:
我期望找到'容器流体'的主导航Div,但是 相反,我得到了OpenQA.Selenium.Firefox.FirefoxWebElement
如何对预期和发现的内容进行相等检查?
IWebElement and string
修改:作为备注我已尝试将public static void validateTopBarNavigationIsPresent()
{
var expectedTopNavClassName = "container-fluid";
// Find the navigation element container to check it loaded
var topNavClassName = Driver.Instance.FindElement(By.ClassName("container-fluid")).ToString();
Console.WriteLine($"The variable topNavClassName contains the value: {topNavClassName}");
// OR perhaps it's better to find it this way?
//IJavaScriptExecutor js = Driver.Instance as IJavaScriptExecutor;
//string topNavClassHTML = (string)js.ExecuteScript("return arguments[0].innerHTML;", expectedTopNavClassName);
//Console.WriteLine($"The variable url contains the value {topNavClassHTML}");
if (topNavClassName == expectedTopNavClassName)
{
Console.WriteLine($"I found the main navigation Div by its Class Name: {topNavClassName}");
}
else
{
Console.WriteLine("The main navigation Div was NOT located on the page");
var topBarNavigationException = $"I expected to find the main navigation Div of 'container-fluid', but instead I got {topNavClassName}";
TakeScreenshot.SaveScreenshot();
throw new Exception(topBarNavigationException);
}
}
更改为(topNavClassName == expectedTopNavClassName)
,并且我可以通过将(topNavClassName != null)
类名称字符串更改为topNavClassName
来解决此问题它会失败。所以似乎有些东西被发现了。
更新
进一步调查我自己的问题我修改了代码,只是检查页面上是否存在所需的类名字符串。这显然有效(但很明显?)但是我仍然觉得最好把字符串作为一个更直观的证明 - 它在那里并且符合预期。
以下是备用代码:
("container-fluidssssss")
P.S。感谢格式编辑:)
答案 0 :(得分:1)
在此示例中,您正在测试的条件似乎始终为真,因此不值得测试。原因如下:您找到topNav
元素因为它的CSS类container-fluid
(Driver.Instance.FindElement(By.ClassName("container-fluid"))
),后来想要测试该元素是否具有该特定CSS类。但如果不是这样,你就不会在第一时间找到那个元素。
我要做的是尝试根据其他属性(理想情况下是ID,名称或XPath)找到该元素,然后验证找到的元素是否还有您想要的CSS类检查。 这是你如何做到的:
var expectedTopNavClassName = "container-fluid";
var topNavElement = Driver.Instance.FindElement(By.Id("..."));
var topNavClassName = topNavElement.GetAttribute("class");
Console.WriteLine($"The variable topNavClassName contains the value: {topNavClassName}");
if (topNavClassName != expectedTopNavClassName)
{
throw new Exception("...");
}
请注意,我所比较的不是WebElement
本身,而是该元素的class
属性的值。