Skip to content

Commit c5cce95

Browse files
authored
Merge pull request #77 from quantori/feature/parallel-test-run
Changes to webdriver fields to allow parallel test run
2 parents d320941 + 2c14328 commit c5cce95

File tree

5 files changed

+34
-30
lines changed

5 files changed

+34
-30
lines changed

Behavioral.Automation.DemoBindings/Bootstrapper.cs

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,26 +10,21 @@ public class Bootstrapper
1010
{
1111
private readonly IObjectContainer _objectContainer;
1212
private readonly ITestRunner _runner;
13-
private static DemoTestServicesBuilder _servicesBuilder;
14-
private static readonly BrowserRunner BrowserRunner = new BrowserRunner();
13+
private readonly DemoTestServicesBuilder _servicesBuilder;
14+
private readonly BrowserContext _browserContext;
1515

16-
public Bootstrapper(IObjectContainer objectContainer, ITestRunner runner)
16+
public Bootstrapper(IObjectContainer objectContainer, ITestRunner runner, BrowserContext browserContext)
1717
{
1818
_objectContainer = objectContainer;
1919
_runner = runner;
20+
_browserContext = browserContext;
2021
_servicesBuilder = new DemoTestServicesBuilder(objectContainer, new TestServicesBuilder(_objectContainer));
2122
}
2223

23-
[BeforeTestRun]
24-
public static void OpenBrowser()
24+
[AfterScenario]
25+
public void CloseBrowser()
2526
{
26-
BrowserRunner.OpenChrome();
27-
}
28-
29-
[AfterTestRun]
30-
public static void CloseBrowser()
31-
{
32-
BrowserRunner.CloseBrowser();
27+
_browserContext.CloseBrowser();
3328
}
3429

3530
[BeforeScenario(Order = 0)]
@@ -39,6 +34,7 @@ public void Bootstrap()
3934
_objectContainer.RegisterTypeAs<UserInterfaceBuilder, IUserInterfaceBuilder>();
4035
_servicesBuilder.Build();
4136
Assert.SetConsumer(_objectContainer.Resolve<IScenarioExecutionConsumer>());
37+
_browserContext.OpenChrome();
4238
}
4339
}
4440
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
using NUnit.Framework;
2+
3+
[assembly: Parallelizable(ParallelScope.Fixtures)]
4+
5+
//edit if more threads are needed
6+
[assembly: LevelOfParallelism(1)]

src/Behavioral.Automation/Services/BrowserRunner.cs renamed to src/Behavioral.Automation/Services/BrowserContext.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
11
using System;
22
using System.Collections.Generic;
33
using JetBrains.Annotations;
4-
using OpenQA.Selenium;
54
using OpenQA.Selenium.Chrome;
65
using OpenQA.Selenium.Remote;
76

87
namespace Behavioral.Automation.Services
98
{
10-
public class BrowserRunner
9+
public class BrowserContext
1110
{
11+
public RemoteWebDriver Driver;
12+
1213
public void OpenBrowser([NotNull] RemoteWebDriver driver)
1314
{
14-
DriverService.Driver = driver;
15+
Driver = driver;
1516
}
1617

1718
public void CloseBrowser()
1819
{
19-
DriverService.Driver.Dispose();
20+
Driver.Dispose();
2021
}
2122

2223
public void OpenChrome(ChromeOptions options = null)

src/Behavioral.Automation/Services/DriverService.cs

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
using System;
22
using System.Collections.ObjectModel;
3-
using System.Linq;
43
using System.Drawing;
4+
using System.Linq;
55
using System.Text.RegularExpressions;
6+
using System.Threading;
67
using Behavioral.Automation.Services.Mapping.Contract;
78
using JetBrains.Annotations;
9+
using NUnit.Framework;
810
using OpenQA.Selenium;
911
using OpenQA.Selenium.Interactions;
1012
using OpenQA.Selenium.Remote;
11-
using OpenQA.Selenium.Support.UI;
12-
using System.Threading;
13-
using NUnit.Framework;
1413

1514
namespace Behavioral.Automation.Services
1615
{
@@ -19,18 +18,17 @@ public sealed class DriverService : IDriverService
1918
{
2019
[NotNull]
2120
private readonly IScopeContextManager _scopeContextManager;
21+
private readonly BrowserContext _browserContext;
2222

23-
public static RemoteWebDriver Driver;
24-
25-
public DriverService([NotNull] IScopeContextManager scopeContextManager)
23+
public DriverService([NotNull] IScopeContextManager scopeContextManager, BrowserContext browserContext)
2624
{
2725
_scopeContextManager = scopeContextManager;
26+
_browserContext = browserContext;
2827
}
2928

30-
private WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(4));
31-
private ReadOnlyCollection<string> WindowHandles => Driver.WindowHandles;
29+
public RemoteWebDriver Driver => _browserContext.Driver;
3230

33-
private string SearchAttribute = ConfigServiceBase.SearchAttribute;
31+
private readonly string SearchAttribute = ConfigServiceBase.SearchAttribute;
3432

3533
public string Title => Driver.Title;
3634

@@ -85,8 +83,8 @@ public ReadOnlyCollection<IWebElement> FindElementsByXpath(string path)
8583
public void ScrollTo(IWebElement element)
8684
{
8785
var scrollElementIntoMiddle = "var viewPortHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);"
88-
+ "var elementTop = arguments[0].getBoundingClientRect().top;"
89-
+ "window.scrollBy(0, elementTop-(viewPortHeight/2));";
86+
+ "var elementTop = arguments[0].getBoundingClientRect().top;"
87+
+ "window.scrollBy(0, elementTop-(viewPortHeight/2));";
9088

9189
Driver.ExecuteScript(scrollElementIntoMiddle, element);
9290
Actions actions = new Actions(Driver);
@@ -160,7 +158,7 @@ public void SwitchToLastWindow()
160158
}
161159

162160
public void ResizeWindow(int Height, int Width)
163-
{
161+
{
164162
Driver.Manage().Window.Size = new Size(Width, Height);
165163
}
166164

@@ -180,4 +178,4 @@ public void ScrollElementTo(IWebElement element, int offset)
180178
Thread.Sleep(1000);
181179
}
182180
}
183-
}
181+
}

src/Behavioral.Automation/Services/IDriverService.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
using System.Collections.ObjectModel;
22
using JetBrains.Annotations;
33
using OpenQA.Selenium;
4+
using OpenQA.Selenium.Remote;
45

56
namespace Behavioral.Automation.Services
67
{
78
public interface IDriverService
89
{
10+
RemoteWebDriver Driver { get; }
11+
912
string CurrentUrl { [NotNull] get; }
1013

1114
string Title { [CanBeNull] get; }

0 commit comments

Comments
 (0)