如何在C#中使用硒Webdriver进行断言?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在C#中使用硒Webdriver进行断言?相关的知识,希望对你有一定的参考价值。

我正在使用C#中的Selenium WebDriver,必须为申请人创建服务。我已经做完了,但是在确认服务进入清单(需要从另一个用户确认的服务)之后,该清单在读取模式下增加了1。有什么方法可以断言每次添加新服务时这些增加1的值?

答案

您需要使用测试框架来执行此操作-硒本身无法为您声明。

如果使用的是C#,建议安装NUnit。您可以在NuGet程序包管理器下找到此文件,如果您使用的是Visual Studio,则还需要安装NUnitTestAdapter

一旦在项目上安装了测试框架,就可以使用[Test]标志为测试用例指定入口点方法,并使用Assert命名空间中的NUnit语句。

您可以在这里找到文档:https://github.com/nunit/docs/wiki/NUnit-Documentation

另一答案

Selenium的内置断言功能仅存在于SeleniumIDE中,SeleniumIDE是适用于Chrome和Firefox的点击式浏览器加载项。

如果您要像Christine所说的那样用C#编写测试,则需要使用单元测试框架。例如,我正在使用Xunit,一个简单的测试如下所示:

using Xunit;                   // Testing framework.  NuGet package
using OpenQA.Selenium.Firefox; // Driver for Firefox
using Xunit.Priority;          // NuGet add-on to Xunit that allows you to order the tests
using OpenQA.Selenium;         // NuGet package 
using System.Diagnostics;      // Can Debug.Print when running tests in debug mode

namespace Test_MyWebPage
{
    [TestCaseOrderer(PriorityOrderer.Name, PriorityOrderer.Assembly)] // Set up ordering
    public class Test_BasicLogin : IDisposable
    {
       public static IWebDriver driver = new FirefoxDriver(@"path	ogeckodriver");

       // Here be the tests...
       [Fact, Priority(0)]
       public void Test_LaunchWebsite()
       {
           // Arrange
           var url = "https://yourserver.yourdomain/yourvirtualdir";

           // Act

           // Sets browser to maximized, allows 1 minute for the page to
           // intially load, and an implicit time out of 1 minute for elements
           // on the page to render.
           driver.Manage().Window.Maximize();
           driver.Manage().Timeouts().PageLoad = new TimeSpan(0, 1, 0);
           driver.Manage().Timeouts().ImplicitWait = new TimeSpan(0, 1, 0);

           driver.url = url;  // Launches the browser and opens the page

           /* Assuming your page has a login prompt 
           /* we'll try to locate this element 
           /* and perform an assertion to test that the page comes up
           /* and displays a login prompt */

           var UserNamePrompt = driver.FindElement(By.Id("userLogin_txtUserName"));   

           // Assert
           Assert.NotNull(UserNamePrompt); // Bombs if the prompt wasn't found.
           Debug.Print("Found User Name Prompt successfully.");
        }

        public void Dispose()
        {
           // Properly close the browser when the tests are done
            try
            {
                driver.Quit();
            }
            catch (Exception ex)
            {
                Debug.WriteLine($"Error disposing driver: {ex.Message}");
            }
        }
    }
}

如您所见,为Selenium WebDriver设置测试要比使用SeleniumIDE设置简单的冒烟测试多得多。我还没有解决如何正确存储配置(在示例中使用硬编码是不好的方法),并且您将不得不定制driver.find()语句以适合您的具体情况。我正在使用Xunit.Priority包,因此我可以确保测试不会全部并行运行。我需要在进度中一次测试一件事。将所有步骤都放在一个Test_ *方法中可以满足您的需求。每种方法在Visual Studio“测试资源管理器”窗口中显示为单独的测试。右键单击“测试资源管理器”中的测试,然后选择“调试选定的测试”,您可以设置断点,还可以使Debug.Print(或Debug.Write / Writeline)方法显示在VS输出窗口的“测试”部分中。

另一个麻烦在于设置IWebDriver:请勿在路径中放入包含可执行文件的complete路径,而应将包含可执行文件的路径放在其中。

祝您好运,测试愉快!

以上是关于如何在C#中使用硒Webdriver进行断言?的主要内容,如果未能解决你的问题,请参考以下文章

如何自动硒webdriver的Flex应用程序

如何强制Selenium WebDriver点击当前不可见的元素?

如何维护硒的屏幕?

Selenium webdriver:修改 navigator.webdriver 标志以防止硒检测

如何单击硒悬停后可见的元素?

如何等到硒python中的元素可用