有没有任何例子可以执行TestInitialize& TestCleanup只在C#中用于selenium webdriver

时间:2016-04-12 13:52:37

标签: c# selenium webdriver

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

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

我在Test Initialize中声明了登录,并在清理中声明了driver.quit。

但是在MS Script框架工作中登录&注销是针对每种测试方法执行的,我不想要TestInitialize&清理以执行每种方法。

如果可以使用NUnit或任何其他框架工作,请提供完整的信息。

3 个答案:

答案 0 :(得分:0)

我在另一个问类似问题的问题中发布了这个问题。我不会为您提供完整的工作代码"但这是你如何做到这一点...

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

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

答案 1 :(得分:0)

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();
        }

    }
}

答案 2 :(得分:0)

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

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

public static float baryCentric(Vector3f p1, Vector3f p2, Vector3f p3, Vector2f pos) {
    float det = (p2.z - p3.z) * (p1.x - p3.x) + (p3.x - p2.x) * (p1.z - p3.z);
    float l1 = ((p2.z - p3.z) * (pos.x - p3.x) + (p3.x - p2.x) * (pos.y - p3.z)) / det;
    float l2 = ((p3.z - p1.z) * (pos.x - p3.x) + (p1.x - p3.x) * (pos.y - p3.z)) / det;
    float l3 = 1.0f - l1 - l2;
    return l1 * p1.y + l2 * p2.y + l3 * p3.y;
}

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

Edit2:我会读硒的recommendations in their documentation