private static void WaitForPageToLoad(this IBrowser browser, TimeSpan timeoutSpan)
 {
     browser.WaitFor(x => x.ExecuteScript("return document.readyState;").Equals("complete"), timeoutSpan);
 }
 public static void WaitForElement(this IBrowser browser, By @by, TimeSpan timeout, bool disapear)
 {
     browser.WaitFor(x => (x.FindElements(@by).Count > 0 && !disapear) || (x.FindElements(@by).Count == 0 && disapear), timeout);
 }
		private async Task<string> SelectCity(IBrowser browser, string city, string jsFunc, string context, CancellationToken ct)
		{
			await browser.ExecuteJs($"fragma.modules.cities.{jsFunc}('{city}')", ct);
			var cities = new List<string>();
			try
			{
				if (!await browser.WaitFor(async () =>
				{
					var citiesResponse = (await browser.ExecuteJs($"return fragma.modules.cities.{context}.cities", ct) as IList);
					if (citiesResponse.Count > 0)
					{
						foreach (var c in citiesResponse)
							cities.Add(c.ToString());
						return true;
					}
					return false;
				}, 15000, ct))
					throw new TimeoutException("Can't find city");

				if (!cities.Any())
					return null;

				if (cities.Count == 1)
					return cities.First();

				var weight = 0;
				var index = 0;
				var i = 0;
				foreach (var city1 in cities)
				{
					var newWeight = city.GetLevelOfSimilarity(city1);
					if (newWeight > weight)
					{
						index = i;
						weight = newWeight;
					}
					++i;
				}
				if (weight == 0)
					return null;
				await browser.Select($"ul.ui-autocomplete li:nth-child({index + 1})", ct);
				return cities[index];
			}
			catch (Exception)
			{
				return null;
			}
		}