There are no "CreateDevToolsSession" in ChromeDriver Selenium - c#

I'm using Selenium and trying to use CDP to mock Geolocation. But I'm having a problem that the ChromeDriver dont have anything like CreateDevToolsSession.
This is the code that I've found in the Selenium Documentation:
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.DevTools;
using OpenQA.Selenium.DevTools.V87.Emulation;
namespace dotnet_test {
class Program {
public static void Main(string[] args) {
GeoLocation().GetAwaiter().GetResult();
}
public static async Task GeoLocation() {
ChromeDriver driver = new ChromeDriver();
DevToolsSession devToolsSession = driver.CreateDevToolsSession();
var geoLocationOverrideCommandSettings = new SetGeolocationOverrideCommandSettings();
geoLocationOverrideCommandSettings.Latitude = 51.507351;
geoLocationOverrideCommandSettings.Longitude = -0.127758;
geoLocationOverrideCommandSettings.Accuracy = 1;
await devToolsSession
.GetVersionSpecificDomains<OpenQA.Selenium.DevTools.V87.DevToolsSessionDomains>()
.Emulation
.SetGeolocationOverride(geoLocationOverrideCommandSettings);
driver.Url = "<your site url>";
}
}
}
Thanks.
** UPDATE 1 **
This is the link for the documentation references.
https://www.selenium.dev/documentation/webdriver/bidirectional/chrome_devtools/

Selenium 4 Breaking Changes
CreateDevToolsSession() has been replaced with GetDevToolsSession().
A lot of examples you find online were written with the Beta version, like this one: https://dotjord.wordpress.com/2020/09/13/how-to-capture-network-activity-with-selenium-4-in-asp-net-core-3-1/ and this old code gets copied around https://stackoverflow.com/a/69478097/495455
Beta (old code):
IDevTools devTools = driver as IDevTools;
DevToolsSession session = devTools.CreateDevToolsSession();
session.Network.ResponseReceived += ResponseReceivedHandler;
session.Network.Enable(new EnableCommandSettings());
driver.Navigate().GoToUrl(url);
public void ResponseReceivedHandler(object sender, ResponseReceivedEventArgs e)
{
System.Diagnostics.Debug.WriteLine($"Status: { e.Response.Status } : {e.Response.StatusText} | File: { e.Response.MimeType } | Url: { e.Response.Url }");
}
Alpha (working code):
using DevToolsSessionDomains = OpenQA.Selenium.DevTools.V96.DevToolsSessionDomains;
var driver = new ChromeDriver();
var devTools = (IDevTools)driver;
IDevToolsSession session = devTools.GetDevToolsSession();
var domains = session.GetVersionSpecificDomains<DevToolsSessionDomains>();
domains.Network.ResponseReceived += ResponseReceivedHandler;
await domains.Network.Enable(new OpenQA.Selenium.DevTools.V96.Network.EnableCommandSettings());
driver.Navigate().GoToUrl(url);
void ResponseReceivedHandler(object sender, ResponseReceivedEventArgs e)
{
System.Diagnostics.Debug.WriteLine($"Status: { e.Response.Status } : {e.Response.StatusText} | File: { e.Response.MimeType } | Url: { e.Response.Url }");
}

In a addition to the nice answer from Jeremy Thompson, I wanted to share a new approach without being version and browser specific for Selenium 4+. (Works in Chrome and Edge with Selenium 4.8)
public void SetupNetworkLogging(IWebDriver driver)
{
NetworkManager manager = new NetworkManager(driver);
manager.NetworkResponseReceived += ResponseHandler;
manager.StartMonitoring();
}
private void ResponseHandler(object sender, NetworkResponseReceivedEventArgs e)
{
Console.WriteLine($"Http status: {e.ResponseStatusCode} : {e.ResponseBody} | Url: {e.ResponseUrl} ");
}
The official documentation for geolocation is now updated, for geolocation it seems to be nessessary, but if you don't need to specify a version use that:
IDevTools devTools = driver as IDevTools;
var session = devTools.GetDevToolsSession();
Offical documentation can be found here.

Related

Selenium webdriver C# checking for text

Trying to write a test that checks if some words are on the page.
I'm getting a no such element: Unable to locate element: {"method":"xpath","selector":"//*[#id='webform - submission - questionnaire - form - ajax']/section[2]"} message and the test for textIsOnThePage fails, everything else passes. Haven't used C# for a long time and trying out testing for the first time, what am I missing with textIsOnThePage ? This is the Xpath that the browser gives me.
public class Tests
{
IWebDriver driver;
String test_url = "http://mytesturl.com";
private readonly Random _random = new Random();
public void start_browser()
{
driver = new EdgeDriver(#"C:\Users\ADMIN\Downloads\edgedriver_win64");
driver.Manage().Window.Maximize();
}
//I run some tests on the page
public void test_page()
{
driver.Url = test_url;
driver.Navigate().GoToUrl("http://mytesturl.com");
Thread.Sleep(5000);
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
try {IWebElement sButton2 = driver.FindElement(By.XPath("//button[#class='agree-button eu-cookie-compliance-secondary-button']"));
js.ExecuteScript("arguments[0].click()", sButton2);
} catch (Exception) { }
for (int a = 0; a < 10; a++)
{
Thread.Sleep(2500);
//I call out my method
TextIsOnThePage("weigh", "weight");
Thread.Sleep(2500);
}
private void TextIsOnThePage(string textToFind, string warning)
{
driver.Url = test_url;
driver.Navigate().GoToUrl("http://mytesturl.com");
Thread.Sleep(5000);
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
var element = driver.FindElement(By.XPath("//*[#id='webform - submission - questionnaire - form - ajax']/section[2]"));
if (!string.IsNullOrEmpty(element.Text) && element.Text.Contains(textToFind))
{
Console.WriteLine("Text for " + warning + "is present");
}
else
{
Console.WriteLine(warning + " test failed");
}
}
public void close_Browser()
{
driver.Quit();
}
}

Attaching Selenium Webdrive to CefSharp browser docked on second form

What i'm trying to do is use the Selenium WebDriver to control Chrome instead of using Javascript, so basically combine Selenium & cefsharp so I can use .sendKeys().
I have docked the browser in a panel here panelBrowserMain.Controls.Add(browser); and read the official docs here: https://bitbucket.org/chromiumembedded/cef/wiki/UsingChromeDriver.md this example loads a seperate client cefClient.exe where as I just want to interact using my embedded browser located here panelBrowserMain.Controls.Add(browser);.
When I do a testing at LinkLabel1_LinkClicked to show the page source i'm getting System.NullReferenceException: Object reference not set to an instance of an object. errors, so the _driver is not being assigned (even though I do in the code)
I have Google'd quite a bit and their is hardly any information or solutions that I can see, is my code even correct, any help or tips would be appreciated.
using CefSharp;
using CefSharp.WinForms;
using OpenQA.Selenium.Chrome;
using System;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Windows.Forms;
namespace projectname
{
public partial class FormBrowser : Form
{
public ChromiumWebBrowser browser;
private ChromeDriver _driver;
private void FormBrowser_Load(object sender, EventArgs e)
{
try
{
// Fix for the formClosing event not firing.
FormClosing += new FormClosingEventHandler(FormBrowser_FormClosed);
Text = string.Format("Chromium: {0}, CEF: {1}, CefSharp: {2}", Cef.ChromiumVersion, Cef.CefVersion, Cef.CefSharpVersion);
}
catch (Exception ex)
{
ClassHelpers.DebugLogging($"[{DateTime.Now}]-[{ex}]");
}
}
private void LinkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
try
{
ClassHelpers.ReturnMessage(_driver.PageSource);
//_driver.FindElement(By.Name("user[profile_attributes][first_name]")).SendKeys("UserName");
}
catch (Exception ex)
{
ClassHelpers.DebugLogging($"[{DateTime.Now}]-[{ex}]");
}
}
public FormBrowser(string[] sites, string mode, FormMain formMain, ClassProject project)
{
InitializeComponent();
InitializeBrowser(sites, project);
}
public void InitializeBrowser(string[] sites, ClassProject project)
{
try
{
if (!Cef.IsInitialized)
{
// CEF.
CefSettings settings = new CefSettings()
{
LogFile = "cef/cefsharp.log",
CachePath = Path.GetFullPath("cef/cache/"),
UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
};
settings.BrowserSubprocessPath = Path.GetFullPath("cef/cefsharp/CefSharp.BrowserSubprocess.exe");
settings.LocalesDirPath = Path.GetFullPath("cef/cefsharp/locales");
settings.ResourcesDirPath = Path.GetFullPath("cef/cefsharp/");
settings.RemoteDebuggingPort = 8088;
settings.UserDataPath = Path.GetFullPath("cef/cefsharp/cefuserdata");
if (project.Proxy != "ip:port")
{
settings.CefCommandLineArgs.Add("proxy-server", project.Proxy);
}
Cef.Initialize(settings, performDependencyCheck: true, browserProcessHandler: null);
// CEF.
sitesCount = sites.Count();
// Load in the first URL that was checked, which is index 0.
browser = new ChromiumWebBrowser(sites[counter])
{
MenuHandler = new MyCustomMenuHandler()
};
browser.AddressChanged += OnBrowserAddressChanged;
panelBrowserMain.Controls.Add(browser);
browser.Dock = DockStyle.Fill;
browserMain.Text = sites[counter];
// Selenium WebDriver.
ChromeOptions options = new ChromeOptions
{
DebuggerAddress = "localhost:8088"
};
options.AddArguments("--no-sandbox");
ChromeDriverService service = ChromeDriverService.CreateDefaultService();
service.HideCommandPromptWindow = true;
_driver = new ChromeDriver(service, options, TimeSpan.FromSeconds(180));
// Selenium WebDriver.
}
else
{
// IMPORTANT: Cef is already initialized, do not do it again.
browser = new ChromiumWebBrowser(sites[counter])
{
MenuHandler = new MyCustomMenuHandler()
};
browser.AddressChanged += OnBrowserAddressChanged;
panelBrowserMain.Controls.Add(browser);
browser.Dock = DockStyle.Fill;
browserMain.Text = sites[counter];
// Add the code here once we get it working above.
}
}
catch (Exception ex)
{
ClassHelpers.DebugLogging($"[{DateTime.Now}]-[{ex}]");
}
}
}
}

c# nunit extent reports not getting screenshot, passing on exception

i am trying to add screenshot to my extent report.
I have applied exception to one of my test methods, and giving screenshot taking in exception.
Then i have called the screenshot function in teardown, so screenshot can show up in case it is failed. All good. but when i run the code that should be failing, it marks it pass due to exception, and in extent report it displays it as pass.How do i make it appear fail in extent report and display the fail screenshot with it?
namespace CreateTeamSpeed
{
class ReportsGenerationClass
{
protected ExtentReports extent;
protected ExtentTest test;
[OneTimeSetUp]
protected void Setup()
{
string path = TestContext.CurrentContext.TestDirectory + "\\";
string fileName = this.GetType().ToString() + "report.html";
var htmlReporter = new ExtentHtmlReporter(path + fileName);
extent = new ExtentReports();
extent.AttachReporter(htmlReporter);
}
[SetUp]
public void BeforeTest()
{
test = extent.CreateTest(TestContext.CurrentContext.Test.Name);
}
[TearDown]
public void AfterTest()
{
var status = TestContext.CurrentContext.Result.Outcome.Status;
var stacktrace = string.IsNullOrEmpty(TestContext.CurrentContext.Result.StackTrace) ? "" : string.Format("{0}", TestContext.CurrentContext.Result.StackTrace);
Status logstatus;
switch (status)
{
case TestStatus.Failed:
logstatus = Status.Fail;
test.AddScreenCaptureFromPath("screenshot.png");
break;
case TestStatus.Inconclusive:
logstatus = Status.Warning;
break;
case TestStatus.Skipped:
logstatus = Status.Skip;
break;
default:
logstatus = Status.Pass;
break;
}
var mediaModel = MediaEntityBuilder.CreateScreenCaptureFromPath("screenshot.png").Build();
test.Log(logstatus, "Test ended with " + logstatus + stacktrace + mediaModel);
extent.Flush();
}
[Test]
public void Test1()
{
ChromeOptions options = new ChromeOptions();
options.AddArgument("start-maximized");
IWebDriver driver = new ChromeDriver(options);
driver.Navigate().GoToUrl("https://www.google.com");
driver.FindElement(By.Name("q")).SendKeys("Test");
driver.FindElement(By.Name("btnK")).SendKeys(Keys.Enter);
driver.Quit();
}
[Test]
public void Test2()
{
ChromeOptions options = new ChromeOptions();
options.AddArgument("start-maximized");
IWebDriver driver = new ChromeDriver(options);
try{
driver.Navigate().GoToUrl("https://www.google.com");
driver.FindElement(By.Name("qt")).SendKeys("Test");
driver.FindElement(By.Name("btnK")).SendKeys(Keys.Enter);
driver.Quit();
}
catch (Exception ex)
{
((ITakesScreenshot)driver).GetScreenshot().SaveAsFile("screenshot.png", ScreenshotImageFormat.Png);
}
}
}
}'''
If you handle exception, it does not fail test.
To make it fail for external running tools, you can add call of Assert.Fail(); after screenshot.

Why value does not fall within the expected range when setting Value Changed for Gatt Characteristic

I would like to keep on reading characteristic/set value changed event handlers for characteristics from my BLE 4.0 device, by using the ValueChanged callback in Universal Windows Platform C# in Visual Studio 2017.
I followed some tutorial from these sites: Damian Blog's Windows Universal with BLE, Bluetooth Gatt's Git Hub, Bluetooth Generic Attribute Profile - Heart Rate Service and Dr. Jukka's mobile Blog on BLE. All of them are using ValueChanged and I have tried to follow what they did.
Unfortunately, instead of ValueChanged being triggered, I receive the following error when using the ValueChanged callback.
System.ArgumentException: 'Value does not fall within the expected range.'
This line of code is producing the error:
characteristic.ValueChanged += Oncharacteristic_ValueChanged;
Here is more details of my source code:
NOTE: I am using COM 7 for my dongler and my program could discover the BLE's device name, and could discover the Uuid of the services and characteristics.
public List<string> serviceList = new List<string>();
public List<string> characteristicList = new List<string>();
public BluetoothLEDevice myDevice { get; set; }
public MainPage()
{
this.InitializeComponent();
}
private async void Page_Loaded(object sender, RoutedEventArgs e)
{
// Find the com port
string selector = SerialDevice.GetDeviceSelector("COM7");
DeviceInformationCollection devices = await DeviceInformation.FindAllAsync(selector);
if (devices.Count > 0)
{
var dialog = new MessageDialog("Com Device found");
await dialog.ShowAsync();
DeviceInformation deviceInfo = devices[0];
SerialDevice serialDevice = await SerialDevice.FromIdAsync(deviceInfo.Id);
serialDevice.BaudRate = 9600;
serialDevice.DataBits = 8;
serialDevice.StopBits = SerialStopBitCount.One;
serialDevice.Parity = SerialParity.None;
}
else
{
MessageDialog popup = new MessageDialog("Sorry, no device found.");
await popup.ShowAsync();
}
// After com port is found, search for device
foreach (DeviceInformation di in await DeviceInformation.FindAllAsync(BluetoothLEDevice.GetDeviceSelector()))
{
BluetoothLEDevice bleDevice = await BluetoothLEDevice.FromIdAsync(di.Id);
// Display BLE device name
var dialogBleDeviceName = new MessageDialog("BLE Device Name " + bleDevice.Name);
await dialogBleDeviceName.ShowAsync();
myDevice = bleDevice;
}
// Check device connection
myDevice.ConnectionStatusChanged += OnConnectionStatusChanged;
foreach (var service in myDevice.GattServices)
{
serviceList.Add(service.Uuid.ToString());
// Verify if service is discovered by displaying a popup
MessageDialog serviceUuidPopUp = new MessageDialog("Adding Service Uuid to list " + service.Uuid.ToString() );
await serviceUuidPopUp.ShowAsync();
foreach (var characteristic in service.GetAllCharacteristics())
{
var characteristicUuid = characteristic.Uuid.ToString().ToLowerInvariant();
characteristicList.Add(characteristicUuid);
// Verify if characteristic is discovered by displaying a popup
MessageDialog charUuidPopUp = new MessageDialog("Adding characteristic Uuid to list " + characteristicUuid);
await charUuidPopUp.ShowAsync();
// set value changed event handlers for characteristics
characteristic.ValueChanged += Oncharacteristic_ValueChanged;
}
}
}
private void OnConnectionStatusChanged(BluetoothLEDevice sender, object args)
{
if (sender.ConnectionStatus == BluetoothConnectionStatus.Connected)
{
System.Diagnostics.Debug.WriteLine("Connected");
}
else
{
System.Diagnostics.Debug.WriteLine("Disconnected");
}
}
private void Oncharacteristic_ValueChanged(GattCharacteristic sender, GattValueChangedEventArgs args)
{
byte[] data = new byte[args.CharacteristicValue.Length];
DataReader.FromBuffer(
args.CharacteristicValue).ReadBytes(data);
string text = Encoding.UTF8.GetString(data, 0, data.Length);
}
UPDATE 1
I tried to check Characteristic Properties before set value changed event handlers for my characteristics by following the answer given by rudi belt on SO.
if (characteristic.CharacteristicProperties == (GattCharacteristicProperties.Read | GattCharacteristicProperties.Notify))
{
characteristic.ValueChanged += Oncharacteristic_ValueChanged;
}
Unfortunately, this IF statement is not executed.
UPDATE 2
I have tried to remove ALL the codes inside Oncharacteristic_ValueChanged method. But it still gives me the same error
System.ArgumentException: 'Value does not fall within the expected range.'
I have been spending a lot of time trying to solve this problem. I will be very happy if anyone can help me on this. Thank you!
Reading your efforts in the former question I can provide a working example, but first some explanation.
myDevice.ConnectionStatusChanged is not needed, it is only used to notice a connection is lost or connected. You have to connect to your device first and handle things in the connection method.
After you have succeeded in connecting you have to get the service that contains the characteristic you want to use for read, write, notify or indicate.
When you have selected the service You can get the characteristics of that service.
Select the characteristic by Uuid, or in my example with CharacteristicProperties.HasFlag.
This flag in my example is Notify.
In the code comments you find extra info.
using System;
using System.Diagnostics;
using System.Threading.Tasks;
using Windows.Devices.Bluetooth;
using Windows.Devices.Bluetooth.GenericAttributeProfile;
using Windows.Devices.Enumeration;
using Windows.UI.Popups;
using Windows.UI.Xaml.Controls;
namespace App1
{
public sealed partial class MainPage : Page
{
GattDeviceServicesResult serviceResult = null;
private BluetoothLEDevice myDevice;
private GattCharacteristic selectedCharacteristic;
public MainPage()
{
this.InitializeComponent();
ConnectDevice();
}
private async void ConnectDevice()
{
//This works only if your device is already paired!
foreach (DeviceInformation di in await DeviceInformation.FindAllAsync(BluetoothLEDevice.GetDeviceSelector()))
{
BluetoothLEDevice bleDevice = await BluetoothLEDevice.FromIdAsync(di.Id);
// Display BLE device name
var dialogBleDeviceName = new MessageDialog("BLE Device Name " + bleDevice.Name);
await dialogBleDeviceName.ShowAsync();
myDevice = bleDevice;
}
if (myDevice != null)
{
int servicesCount = 3;//Fill in the amount of services from your device!!!!!
int tryCount = 0;
bool connected = false;
while (!connected)//This is to make sure all services are found.
{
tryCount++;
serviceResult = await myDevice.GetGattServicesAsync();
if (serviceResult.Status == GattCommunicationStatus.Success && serviceResult.Services.Count >= servicesCount)
{
connected = true;
Debug.WriteLine("Connected in " + tryCount + " tries");
}
if (tryCount > 5)//make this larger if faild
{
Debug.WriteLine("Failed to connect to device ");
return;
}
}
if (connected)
{
for (int i = 0; i < serviceResult.Services.Count; i++)
{
var service = serviceResult.Services[i];
//This must be the service that contains the Gatt-Characteristic you want to read from or write to !!!!!!!.
string myServiceUuid = "0000ffe0-0000-1000-8000-00805f9b34fb";
if (service.Uuid.ToString() == myServiceUuid)
{
Get_Characteriisics(service);
break;
}
}
}
}
}
private async void Get_Characteriisics(GattDeviceService myService)
{
var CharResult = await myService.GetCharacteristicsAsync();
if (CharResult.Status == GattCommunicationStatus.Success)
{
foreach (GattCharacteristic c in CharResult.Characteristics)
{
if (c.CharacteristicProperties.HasFlag(GattCharacteristicProperties.Notify))
{
selectedCharacteristic = c;
break;
}
}
try
{
// Write the ClientCharacteristicConfigurationDescriptor in order for server to send notifications.
var result = await selectedCharacteristic.WriteClientCharacteristicConfigurationDescriptorAsync(
GattClientCharacteristicConfigurationDescriptorValue.Notify);
if (result == GattCommunicationStatus.Success)
{
var dialogNotifications = new MessageDialog("Successfully registered for notifications");
await dialogNotifications.ShowAsync();
selectedCharacteristic.ValueChanged += SelectedCharacteristic_ValueChanged;
}
else
{
var dialogNotifications = new MessageDialog($"Error registering for notifications: {result}");
await dialogNotifications.ShowAsync();
}
}
catch (Exception ex)
{
// This usually happens when not all characteristics are found
// or selected characteristic has no Notify.
var dialogNotifications = new MessageDialog(ex.Message);
await dialogNotifications.ShowAsync();
await Task.Delay(100);
Get_Characteriisics(myService); //try again
//!!! Add a max try counter to prevent infinite loop!!!!!!!
}
}
else
{
var dialogNotifications = new MessageDialog("Restricted service. Can't read characteristics");
await dialogNotifications.ShowAsync();
}
}
private void SelectedCharacteristic_ValueChanged(GattCharacteristic sender, GattValueChangedEventArgs args)
{
}
}
}
If you have problems with this code feel free to ask in comments.

Timeout in Selenium Chrome driver

I have a code which triggers 5 console apps (same code base different location).
public static void RunLoadGenInstances(int loadGenInstanceCount, string exePath)
{
try
{
for (int i = 1; i < loadGenInstanceCount; i++)
{
Thread.Sleep(1000);
Process.Start(exePath + i + #"\bin\Debug\wm_uk_hr_loadgen.exe");
Thread.Sleep(1000);
}
}
catch (Exception ex)
{
}
}
Each of the exe inilitializes the ChromeDriver.exe from their own executable path and opens up Chrome.
ChromeOptions options = new ChromeOptions();
options.AddUserProfilePreference("download.default_directory", file_path);
options.AddUserProfilePreference("disable-popup-blocking", "true");
options.AddArguments("--disable-extensions");
options.AddArguments("--start-maximized");
ChromeDriverService service = ChromeDriverService.CreateDefaultService(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
service.SuppressInitialDiagnosticInformation = true;
service.HideCommandPromptWindow = true;
string url = HRSSUrl;
chromeDriver = new ChromeDriver(service, options);
Thread.Sleep(500);
chromeDriver.Navigate().GoToUrl(url);
Console.WriteLine("Enter uid");
IWebElement idWait = wait.Until(ExpectedConditions.ElementIsVisible(By.Id("__control0-user")));
IWebElement id = chromeDriver.FindElement(By.Id("__control0-user"));
id.SendKeys(c4cUserId);
Console.WriteLine("uid entered");
Console.WriteLine("Enter pwd");
IWebElement passWait = wait.Until(ExpectedConditions.ElementIsVisible(By.Id("__control0-pass")));
IWebElement pass = chromeDriver.FindElement(By.Id("__control0-pass"));
pass.SendKeys(c4cPassword);
Console.WriteLine("pwd entered");
Console.WriteLine("click login");
IWebElement loginWait = wait.Until(ExpectedConditions.ElementIsVisible(By.Id("__control0-logonBtn")));
IWebElement login = chromeDriver.FindElement(By.Id("__control0-logonBtn"));
login.Click();
Problem is- Chrome is able to launch and navigate to URL but it is stuck on Sign In page. This happens in 4 console apps except 1, which runs fine. Below is the exception message which I get from the failed apps.
Enter uid
at OpenQA.Selenium.Support.UI.DefaultWait`1.ThrowTimeoutException(String exce
ptionMessage, Exception lastException)
at OpenQA.Selenium.Support.UI.DefaultWait`1.Until[TResult](Func`2 condition)
at wm_uk_hr_loadgen.Program.SelectAuthenticationDropDown() in c:\UK-HR\LoadGe
n-MultiInstance\LoadGen1\Program.cs:line 273
at wm_uk_hr_loadgen.Program.Main(String[] args) in c:\UK-HR\LoadGen-MultiInst
ance\LoadGen1\Program.cs:line 105
Any help? Please let me know if any details needed.
Thanks,
Souvik

Categories