【问题标题】:Is there any example to execute TestInitialize & TestCleanup only once in C# for selenium webdriver是否有任何示例仅在 C# 中为 selenium webdriver 执行一次 TestInitialize 和 TestCleanup
【发布时间】:2020-07-31 20:39:34
【问题描述】:

我是使用 C# 的 selenium web 驱动程序的新手。我的脚本中有登录、20 种测试方法和注销,我希望它按以下顺序执行:

Login (TestInitialize())
Test1
Test2
Test3
.
.
Test20
Logout (TestCleanup())

我在 Test Initialize 中声明 Login 并在 Cleanup 中声明 driver.quit。

但是在 MS Script 框架中,每个测试方法都会执行登录和注销,我不希望每个方法都执行 TestInitialize 和清理。

如果 NUnit 或任何其他框架可以做到这一点,请提供完整的信息。

【问题讨论】:

  • 最后脚本执行应该像 Selenium WebDriver 和 TestNG 一样工作
  • “请提供示例代码” 这是你的工作,而不是那些试图免费帮助你的人的工作。通常,提出问题的人会发布他们的代码、当前输出和期望的行为,然后我们从那里开始。欢迎来到本站! :)

标签: c# selenium webdriver


【解决方案1】:

我在另一个问类似问题的问题中发布了这个。我不会为您提供“完整的工作代码”,但您可以通过以下方式完成此操作...

您可以创建 IWebDriver 的类变量并在默认构造函数中对其进行初始化。然后只需将该驱动程序实例用于该特定类中的所有测试即可。为了在最后一次测试运行后退出潜水员,您可以保留某种计数器或指示器作为类变量,然后在 TearDown 方法中检查该变量以及它是否与最后一次测试调用 driver.Dispose( )

如果您更喜欢在 Setup 方法中初始化 IWebDriver,仍然使用一个字段来保存您的 IWebDriver 实例,并在 Setup 方法中检查 IWebDriver 变量(字段)是否为空。如果它不为空,那么什么都不做。

【讨论】:

  • 我不能这样做。我在这里添加我的代码你可以修改代码吗?我的代码粘贴在下面:
  • 我不能这样做。任何人都可以提供/更新我的代码,以便我可以进一步进行。
【解决方案2】:
using System;
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium.Firefox;
using System.Threading;

// In This script TestInitialize & Test Cleanup executes for each TestMethod
namespace Codify
{
    [TestClass]
    public class UnitTest2{
    IWebDriver driver = new FirefoxDriver();

        [TestInitialize()]
            public void TestInitialize()
            {
                driver.Navigate().GoToUrl("https://www.google.co.in");
                Thread.Sleep(1000);
            }

        [TestMethod]
        public void TestMethod1()
        {
            ICollection<IWebElement> links = driver.FindElements(By.TagName("a"));
            foreach (var link in links)
            {
                Console.WriteLine(link.GetAttribute("text"));
            }
        }

        [TestMethod]
        public void TestMethod2()
        {
            driver.FindElement(By.Id("lst-ib")).SendKeys("Testing");
            Thread.Sleep(1000);
            string str = driver.FindElement(By.XPath(".//*[@id='sbtc']/div[2]/div[2]/div[1]")).Text;
            Console.WriteLine(str.Length);
            string[] s = str.Split('\n');
            for (int i = 0; i < s.Length; i++)
            {
                Console.WriteLine(s[i]);
            }
        }

        [TestCleanup()]
        public void testcleanp()
        {
            driver.Quit();
        }

    }
}

【讨论】:

  • 任何人都可以提供/更新我的代码,以便我可以继续进行
【解决方案3】:

测试以随机顺序执行。 TestInitialize 和 TestCleanup 分别在每次测试之前和之后执行。

在某些情况下,AssemblyInitialize 和 AssemblyCleanup 可能对您有所帮助。

AssemblyInitialize() //maybe log-in here?
TestInitialize()
Test1()
TestCleanup()
TestInitialize()
Test8()
TestCleanup()
TestInitialize()
Test5()
TestCleanup()
.
.
.
AssemblyCleanup() // maybe log-out here

编辑:也许 ClassInitializeClassCleanup 是更好的选择。

Edit2:我会阅读 selenium 的 recommendations in their documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多