WebDriver C# - IWebElement和String之间的等式检查

时间:2017-03-02 09:46:39

标签: c# selenium webdriver automated-tests

我正在尝试检查页面上是否存在具有给定类的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。感谢格式编辑:)

1 个答案:

答案 0 :(得分:1)

在此示例中,您正在测试的条件似乎始终为真,因此不值得测试。原因如下:您找到topNav元素因为它的CSS类container-fluidDriver.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属性的值。