public WeatherDetails GetWeatherInfoFromAPI(string city)
        {
            WeatherDetails APIWeatherInfo = new WeatherDetails();

            string JsonResponse = autoLib.GetWeatherDataFromAPI(city.ToString());

            APIWeatherInfo = parseJsonResponse(JsonResponse);

            return(APIWeatherInfo);
        }
        static void Main(string[] args)
        {
            TestLibrary TestLib = new TestLibrary();

            AutomationLib.WeatherCheck autoLib = new AutomationLib.WeatherCheck();

            ConfigParmaeter configParameter = new ConfigParmaeter();

            configParameter = TestLib.GetConfigParameterFromExternalFile();
            int    varianceForTempratureInCelsius  = configParameter.TemperatureInCelsius;
            int    varianceForHumidityInPercentage = configParameter.HumidityInPercentage;
            int    variaceForWindSpeedInKMPH       = configParameter.WindSpeedInKMPH;
            string city = configParameter.City;

            autoLib.LaunchBrowserAndNavigateToURL(sNDTVUrl, WeatherCheck.eBrowser.CHROME);

            TestLib.NavigateToWeatherPageAndSearchForCity(city);

            if (TestLib.VerifySearchedCityDisplayedOnMap(city) == "true")
            {
                Console.WriteLine("PASS : Searched city is displayed on the map");
            }
            else
            {
                Console.WriteLine("FAIL : Searched city is not displayed on the map");
            }

            WeatherDetails weatherDetailsOnNDTV = new WeatherDetails();

            weatherDetailsOnNDTV = TestLib.GetWeatherInfoFromNDTV(city);

            WeatherDetails weatherDetailsFromAPI = new WeatherDetails();

            weatherDetailsFromAPI = TestLib.GetWeatherInfoFromAPI(city);

            TestLib.VerifySearchedCityDisplayedOnMap(city);

            if (TestLib.VerifyWeatherInfoBetweenNDTVAndAPI(weatherDetailsFromAPI, weatherDetailsOnNDTV, varianceForTempratureInCelsius,
                                                           varianceForHumidityInPercentage, variaceForWindSpeedInKMPH))
            {
                Console.WriteLine("PASS : The weather info between NDTV and API matches");
            }
            else
            {
                Console.WriteLine("FAIL : The weather info between NDTV and API does not match");
            }

            Console.ReadLine();

            autoLib.CloseBrowser();
        }
        private WeatherDetails parseJsonResponse(string originalJson)
        {
            WeatherDetails weatherDetailsFromJson = new WeatherDetails();
            JObject        jsonObj = JObject.Parse(originalJson);

            weatherDetailsFromJson.Condition = (string)jsonObj.SelectToken("weather[0].description");
            string windspeed = (string)jsonObj.SelectToken("wind.speed");

            weatherDetailsFromJson.WindSpeed     = double.Parse(windspeed);
            weatherDetailsFromJson.WindSpeedGust = 0;
            weatherDetailsFromJson.Humidity      = (int)jsonObj.SelectToken("main.humidity");
            weatherDetailsFromJson.Temperature   = (int)jsonObj.SelectToken("main.temp");
            weatherDetailsFromJson.Temperature   = weatherDetailsFromJson.Temperature - 273; //convert temperature in kelvin to celsius

            return(weatherDetailsFromJson);
        }
        public WeatherDetails GetWeatherInfoFromNDTV(string city)
        {
            WeatherDetails NDTVWeatherInfo = new WeatherDetails();

            autoLib.Click(WeatherCheck.eByType.XPATH, getLocatorForCityOnMap(city));

            //condition
            NDTVWeatherInfo.Condition = getWeatherCondition(autoLib.GetAttributeVal(WeatherCheck.eByType.CSS, ePageElements.WEATHER_DETAILS_CONDITION.GetDescription(), WeatherCheck.eAttributeValue.Text));

            //WindSpeed
            string windInfo = autoLib.GetAttributeVal(WeatherCheck.eByType.CSS, ePageElements.WEATHER_DETAILS_WIND.GetDescription(), WeatherCheck.eAttributeValue.Text);

            NDTVWeatherInfo.WindSpeed     = getWeatherWindMin(windInfo);
            NDTVWeatherInfo.WindSpeedGust = getWeatherWindMax(windInfo);

            //humidity
            NDTVWeatherInfo.Humidity = getWeatherHumidity(autoLib.GetAttributeVal(WeatherCheck.eByType.CSS, ePageElements.WEATHER_DETAILS_HUMIDITY.GetDescription(), WeatherCheck.eAttributeValue.Text));

            //temperature
            NDTVWeatherInfo.Temperature = getWeatherTemperature(autoLib.GetAttributeVal(WeatherCheck.eByType.CSS, ePageElements.WEATHER_DETAILS_TEMPERATURE.GetDescription(), WeatherCheck.eAttributeValue.Text));

            return(NDTVWeatherInfo);
        }
        public bool VerifyWeatherInfoBetweenNDTVAndAPI(WeatherDetails InfoFromAPI, WeatherDetails InfoFromNDTV,
                                                       int varianceForTemp = 0, int varianceForHumidity = 0, int varianceForWindSpeed = 0)
        {
            bool finalResult       = false;
            bool windSpeedResult   = false;
            bool humidityResult    = false;
            bool temperatureResult = false;

            //compare weather condition
            if (InfoFromAPI.Condition == InfoFromNDTV.Condition)
            {
                Console.WriteLine("PASS : Weather condition is a match");
            }
            else
            {
                Console.WriteLine("Warning : Weather condition is not a match");
                Console.WriteLine("Condition from API : " + InfoFromAPI.Condition);
                Console.WriteLine("Condition from NDTV : " + InfoFromNDTV.Condition);
            }

            //compare windSpeed
            if (Math.Abs(InfoFromAPI.WindSpeed - InfoFromNDTV.WindSpeed) <= varianceForWindSpeed)
            {
                Console.WriteLine("PASS : Weather windSpeed is a match");
                windSpeedResult = true;
            }
            else
            {
                Console.WriteLine("Fail : Weather windSpeed is not a match");
                Console.WriteLine("windSpeed from API : " + InfoFromAPI.WindSpeed);
                Console.WriteLine("windSpeed from NDTV : " + InfoFromNDTV.WindSpeed);
            }

            //compare humidity
            if ((Math.Abs(InfoFromAPI.Humidity - InfoFromNDTV.Humidity) / InfoFromAPI.Humidity) * 100 <= varianceForHumidity)
            {
                Console.WriteLine("PASS : Weather Humidity is a match");
                humidityResult = true;
            }
            else
            {
                Console.WriteLine("Fail : Weather Humidity is not a match");
                Console.WriteLine("Humidity from API : " + InfoFromAPI.Humidity);
                Console.WriteLine("Humidity from NDTV : " + InfoFromNDTV.Humidity);
            }

            //compare temperature
            if (Math.Abs(InfoFromAPI.Temperature - InfoFromNDTV.Temperature) <= varianceForTemp)
            {
                Console.WriteLine("PASS : Weather Temperature is a match");
                temperatureResult = true;
            }
            else
            {
                Console.WriteLine("Fail : Weather Temperature is not a match");
                Console.WriteLine("Temperature from API : " + InfoFromAPI.Temperature);
                Console.WriteLine("Temperature from NDTV : " + InfoFromNDTV.Temperature);
            }

            finalResult = windSpeedResult && humidityResult && temperatureResult;

            return(finalResult);
        }