This is a very common problem.
First, if you haven't already done so, you need to refactor your test code to put the login routine into a helper method. Your helpers should be used to minimize repeated code.
I'd approach the test code this way:
// initialization
[TestInitialize]
// method that calls the browser open routine and goes to the login page
[Test]
public void Test1 ()
{
// call the login method for user X
// assert that you're actually logged in as the expected user
}
[Test]
public void Test2()
{
// call the login method
// call the first tab method
// assert that you're on the first tab
}
// Add test methods for each tab using the same pattern as Test2
[TearDown]
// call the browser close method after each test
This keeps your test code clean, lets you use actions you test one test as setup steps for a second test, and ensures that every test has proper separation of concerns.
If you find you're stringing together a lot of method calls in your tests, build higher level calls to do this, so instead of calling login, then go to tab 1 for a test of something on tab 1, you'd call something like LogonAndGoToTab1()
which in turn calls the login function then the go to tab 1 function.