Reputation: 68
After 2 days of trying reaching out for somebody to shed some light on this. My ideal setup for writing tests is that a test will be developed using local browser (which I can get to work). Then have bunch of tests running on various devices on Browserstack (which I can get them to run). Now the issue is as soon as I have a test in a project that I've setup using link below, I am unable to run tests locally.
https://automate.browserstack.com/dashboard/v2/quick-start/get-started
For example created another project to test local chrome using IWebDriver:
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
namespace NunitSeleniumDemo
{
public class LocalTests
{
[SetUp]
public void Setup()
{
}
[Test]
public void NunitSeleniumTest()
{
String path = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\..\\"));
IWebDriver driver = new ChromeDriver(path + "\\drivers");
driver.Manage().Window.Maximize();
driver.Url = "https://bstackdemo.com/";
DefaultWait<IWebDriver> fluentWait = new DefaultWait<IWebDriver>(driver);
fluentWait.Timeout = TimeSpan.FromSeconds(5);
fluentWait.PollingInterval = TimeSpan.FromMilliseconds(250);
fluentWait.Until(driver => driver.Title == "StackDemo");
driver.Close();
driver.Quit();
}
}
}
That runs perfectly and I can see local Chrome open and going to the website.
as soon as I copy that into Browserstack project it only runs on Browserstack cloud.
From Browserstack Project (same code)
public class CopiedToBrowserstack
{
[SetUp]
public void Setup()
{
}
[Test]
public void CopiedToBrowserStackTest()
{
String path = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\..\\"));
IWebDriver driver = new ChromeDriver(path + "\\drivers");
driver.Manage().Window.Maximize();
driver.Url = "https://bstackdemo.com/";
DefaultWait<IWebDriver> fluentWait = new DefaultWait<IWebDriver>(driver);
fluentWait.Timeout = TimeSpan.FromSeconds(5);
fluentWait.PollingInterval = TimeSpan.FromMilliseconds(250);
fluentWait.Until(driver => driver.Title == "StackDemo");
driver.Close();
driver.Quit();
}
}
what controls where it runs? Had my fair bit with yml file, but no luck.
thanks for your help and time.
EDIT: could be helpful from /log/adapter.log? Not sure why it's invoking browserstack-sdk or where/how to turn it off.
2025-01-26 21:10:34.7637|INFO|BStack.VisualStudio.TestAdapter.BStackAdapter|nunit test started from test explorer
2025-01-26 21:10:34.8502|INFO|A.b|Invoking browserstack-sdk with args: --skip-build-browserstack "C:\vs_code\NUnit-BrowserStack\NUnit-BrowserStack\bin\Debug\net8.0\SingleTest.dll"" --settings "C:\Users\j_f\AppData\Local\Temp\.browserstack\.runsettings" --filter "(FullyQualifiedName=NunitSeleniumDemo.CopiedToBrowserstack.CopiedToBrowserStackTest)"
2025-01-26 21:10:34.8502|INFO|A.b|Setting test assembly Path - C:\vs_code\NUnit-BrowserStack\NUnit-BrowserStack\bin\Debug\net8.0\SingleTest.dll
2025-01-26 21:10:34.8713|INFO|A.b|Debugger is attached, setting VSTEST_HOST_DEBUG
2025-01-26 21:11:04.4375|INFO|A.b|Exec: dotnet browserstack-sdk --skip-build-browserstack "C:\vs_code\NUnit-BrowserStack\NUnit-BrowserStack\bin\Debug\net8.0\SingleTest.dll"
2025-01-26 21:11:04.4488|INFO|A.b|0 :
2025-01-26 21:10:35.6979|INFO|browserstack_sdk.Program|HandleAdapterProcessExit: registering process exit handler for pid: 24172
2025-01-26 21:10:35.7506|INFO|browserstack_sdk.utils|Using dotnet: C:\Program Files\dotnet\dotnet.exe
2025-01-26 21:10:39.3091|INFO|browserstack_sdk.Program|Detected Selenium version 4.7.0
2025-01-26 21:10:39.3091|INFO|browserstack_sdk.Program|Running for f/w nunit 3.13.3
2025-01-26 21:10:39.5407|INFO|browserstack_sdk.Program|Detected dotnet version 9.0.101
2025-01-26 21:10:39.6924|INFO|browserstack_sdk.Program|Adapter Flow Triggered with testDllPath: C:\vs_code\NUnit-BrowserStack\NUnit-BrowserStack\bin\Debug\net8.0\SingleTest.dll
2025-01-26 21:10:39.6924|INFO|browserstack_sdk.Program|Setting Event Listener Path: C:\vs_code\NUnit-BrowserStack\NUnit-BrowserStack\bin\Debug\net8.0\BrowserstackEventListener.addins and BrowserstackListener Dll path :: BrowserstackListener.dll
2025-01-26 21:10:39.6924|INFO|browserstack_sdk.Program|SetupObservability: File already exists
2025-01-26 21:10:39.6924|INFO|browserstack_sdk.utils|Architecture Info - OS: Win32NT, OSVersion: Microsoft Windows NT 10.0.22631.0, Process Arch: X64, System Arch: X64
GIT FOUND
Upvotes: 0
Views: 41
Reputation: 66
Your project is configured with the BrowserStack SDK for running tests, and it defaults to sending tests to BrowserStack's cloud. To run tests locally, you need a way to bypass the BrowserStack SDK interception for local tests.
Use an environment variable to differentiate between running tests locally and on BS.
bool isLocal = Environment.GetEnvironmentVariable("RUN_LOCAL") == "true";
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Remote;
using System;
namespace NunitSeleniumDemo
{
public class CopiedToBrowserstack
{
IWebDriver driver;
[SetUp]
public void Setup()
{
bool isLocal = Environment.GetEnvironmentVariable("RUN_LOCAL") == "true";
if (isLocal)
{
// Local setup
string path = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\..\\"));
driver = new ChromeDriver(path + "\\drivers");
}
else
{
// BrowserStack setup
var capabilities = new OpenQA.Selenium.Chrome.ChromeOptions();
capabilities.BrowserVersion = "latest";
capabilities.PlatformName = "Windows 10";
capabilities.AddAdditionalCapability("bstack:options", new
{
os = "Windows",
osVersion = "10",
buildName = "Your Build Name",
sessionName = "Your Test Name",
userName = "your_browserstack_username",
accessKey = "your_browserstack_access_key",
}, true);
driver = new RemoteWebDriver(new Uri("https://hub.browserstack.com/wd/hub"), capabilities);
}
driver.Manage().Window.Maximize();
}
[Test]
public void CopiedToBrowserStackTest()
{
driver.Url = "https://bstackdemo.com/";
var fluentWait = new OpenQA.Selenium.Support.UI.DefaultWait<IWebDriver>(driver)
{
Timeout = TimeSpan.FromSeconds(5),
PollingInterval = TimeSpan.FromMilliseconds(250)
};
fluentWait.Until(driver => driver.Title == "StackDemo");
driver.Quit();
}
}
}
RUN_LOCAL=true
, for BS execution = false
Upvotes: 0
Reputation: 1
You can use the below parameter in the yml file to run the script locally.
browserstackAutomation: false
Upvotes: 0