为什么我的测试在一起运行时失败,但是单独传递?

Gra*_*ave 18 c# selenium-ide visual-studio-2010 nunit-2.5

当我在Visual Studio中编写测试时,我通过在Nunit中保存,构建然后运行测试来检查它是否有效(右键单击测试然后运行).

测试工作正常...所以我继续......

现在我已经编写了另一个测试,它可以像我上面保存和测试一样工作.但是,当它们一起运行时,它们不起作用.

以下是我的两个测试,这些测试在作为个体运行时有效但在一起运行时失败:

using System;
using NUnit.Framework;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium;

namespace Fixtures.Users.Page1
{
    [TestFixture]
    public class AdminNavigateToPage1 : SeleniumTestBase
    {
        [Test]
        public void AdminNavigateToPage1()
        {
            NavigateTo<LogonPage>().LogonAsCustomerAdministrator();
            NavigateTo<Page1>();
            var headerelement = Driver.FindElement(By.ClassName("header"));

            Assert.That(headerelement.Text, Is.EqualTo("Page Title"));
            Assert.That(Driver.Url, Is.EqualTo("http://localhost/Page Title"));
        }

        [Test]
        public void AdminNavigateToPage1ViaMenu()
        {
            NavigateTo<LogonPage>().LogonAsCustomerAdministrator();
            Driver.FindElement(By.Id("menuitem1")).Click();
            Driver.FindElement(By.Id("submenuitem4")).Click();
            var headerelement = Driver.FindElement(By.ClassName("header"));

            Assert.That(headerelement.Text, Is.EqualTo("Page Title"));
            Assert.That(Driver.Url, Is.EqualTo("http://localhost/Page Title"));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当第二次测试失败时,因为它们一起运行

Nunit介绍了这个:

Sse.Bec.Web.Tests.Fixtures.ManageSitesAndUsers.ChangeOfPremises.AdminNavigateToChangeOfPremises.AdminNavigateToPageChangeOfPremisesViaMenu:OpenQA.Selenium.NoSuchElementException:找不到元素

这一行突出显示:

var headerelement = Driver.FindElement(By.ClassName("header"));
Run Code Online (Sandbox Code Playgroud)

有没有人知道为什么我的代码在一起运行时失败,但在单独运行时通过?

任何答案将不胜感激!

use*_*932 10

这种情况通常发生在单元测试以某种方式使用共享资源/数据时。

  1. 如果您的被测系统具有用于计算您断言的输出的静态字段/属性,也会发生这种情况。
  2. 如果被测系统正在共享(静态)依赖项,则可能会发生这种情况。

  • 我在 .net core 中的 InMemory Database 遇到了这种情况——只是不知道如何解决它 (2认同)

cha*_*dmk 4

您可以尝试两件事

  1. 将断点放在以下两行之间。当第二行被点击时,看看你在哪个页面

  2. 通过 Thread.Sleep 在这两行之间引入轻微的延迟

    Driver.FindElement(By.Id("submenuitem4")).Click();
    var headerelement = Driver.FindElement(By.ClassName("header"));
    
    Run Code Online (Sandbox Code Playgroud)