Проверка количества строк, чтобы проверить, содержат ли они значение в массиве - PullRequest
0 голосов
/ 28 января 2020

Я использую селен, чтобы собрать несколько блоков <p>. Я получаю эти блоки, используя foreach.

. Теперь я хочу проверить эти блоки <p>, чтобы увидеть, содержат ли они значение из моего массива стран.

Вот мой код:

               var countryText = driver.FindElements(By.XPath("/html/body/div[1]/div[2]/div[1]/section[2]/div/div/div[1]/div[1]/p"));

                foreach (IWebElement countries in countryText)
                {

                   string checkCountry = Country(countries.Text.ToString());

                    if (theCountry != "United States")
                    {
                        theCountry = checkCountry;
                        break;
                    }
                }

По какой-то причине он всегда возвращает «Соединенные Штаты» (запасное значение). Моя теория состоит в том, что если есть 10 блоков <p>, последний блок всегда будет перезаписывать значение, если какой-либо блок заранее включал страну в мой список. Если это так, я попытался решить эту проблему, используя break;, но это не сработало.

public static string Country(string address)
    {
 string countryReturn = "";
 string[] countryArray = {
"Afghanistan",
"Albania",
"Algeria",
"American Samoa",
"Andorra",
"Angola",
"Anguilla",
"Antarctica",
"Antigua and Barbuda",
"Argentina",
"Armenia",
"Aruba",
"Australia",
"Austria",
"Azerbaijan",
"Bahamas",
"Bahrain",
"Bangladesh",
"Barbados",
"Belarus",
"Belgium",
"Belize",
"Benin",
"Bermuda",
"Bhutan",
"Bolivia",
"Bosnia and Herzegovina",
"Botswana",
"Bouvet Island",
"Brazil",
"British Indian Ocean Territory",
"Brunei Darussalam",
"Bulgaria",
"Burkina Faso",
"Burundi",
"Cambodia",
"Cameroon",
"Canada",
"Cape Verde",
"Cayman Islands",
"Central African Republic",
"Chad",
"Chile",
"China",
"Christmas Island",
"Cocos (Keeling) Islands",
"Colombia",
"Comoros",
"Congo",
"Congo, the Democratic Republic of the",
"Cook Islands",
"Costa Rica",
"Cote D'Ivoire",
"Croatia",
"Cuba",
"Cyprus",
"Czech Republic",
"Denmark",
"Djibouti",
"Dominica",
"Dominican Republic",
"Ecuador",
"Egypt",
"El Salvador",
"Equatorial Guinea",
"Eritrea",
"Estonia",
"Ethiopia",
"Falkland Islands (Malvinas)",
"Faroe Islands",
"Fiji",
"Finland",
"France",
"French Guiana",
"French Polynesia",
"French Southern Territories",
"Gabon",
"Gambia",
"Georgia",
"Germany",
"Ghana",
"Gibraltar",
"Greece",
"Greenland",
"Grenada",
"Guadeloupe",
"Guam",
"Guatemala",
"Guinea",
"Guinea-Bissau",
"Guyana",
"Haiti",
"Heard Island and Mcdonald Islands",
"Holy See (Vatican City State)",
"Honduras",
"Hong Kong",
"Hungary",
"Iceland",
"India",
"Indonesia",
"Iran, Islamic Republic of",
"Iraq",
"Ireland",
"Israel",
"Italy",
"Jamaica",
"Japan",
"Jordan",
"Kazakhstan",
"Kenya",
"Kiribati",
"Korea, Democratic People's Republic of",
"Korea, Republic of",
"Kuwait",
"Kyrgyzstan",
"Lao People's Democratic Republic",
"Latvia",
"Lebanon",
"Lesotho",
"Liberia",
"Libyan Arab Jamahiriya",
"Liechtenstein",
"Lithuania",
"Luxembourg",
"Macao",
"Macedonia, the Former Yugoslav Republic of",
"Madagascar",
"Malawi",
"Malaysia",
"Maldives",
"Mali",
"Malta",
"Marshall Islands",
"Martinique",
"Mauritania",
"Mauritius",
"Mayotte",
"Mexico",
"Micronesia, Federated States of",
"Moldova, Republic of",
"Monaco",
"Mongolia",
"Montserrat",
"Morocco",
"Mozambique",
"Myanmar",
"Namibia",
"Nauru",
"Nepal",
"Netherlands",
"Netherlands Antilles",
"New Caledonia",
"New Zealand",
"Nicaragua",
"Niger",
"Nigeria",
"Niue",
"Norfolk Island",
"Northern Mariana Islands",
"Norway",
"Oman",
"Pakistan",
"Palau",
"Palestinian Territory, Occupied",
"Panama",
"Papua New Guinea",
"Paraguay",
"Peru",
"Philippines",
"Pitcairn",
"Poland",
"Portugal",
"Puerto Rico",
"Qatar",
"Reunion",
"Romania",
"Russian Federation",
"Rwanda",
"Saint Helena",
"Saint Kitts and Nevis",
"Saint Lucia",
"Saint Pierre and Miquelon",
"Saint Vincent and the Grenadines",
"Samoa",
"San Marino",
"Sao Tome and Principe",
"Saudi Arabia",
"Senegal",
"Serbia and Montenegro",
"Seychelles",
"Sierra Leone",
"Singapore",
"Slovakia",
"Slovenia",
"Solomon Islands",
"Somalia",
"South Africa",
"South Georgia and the South Sandwich Islands",
"Spain",
"Sri Lanka",
"Sudan",
"Suriname",
"Svalbard and Jan Mayen",
"Swaziland",
"Sweden",
"Switzerland",
"Syrian Arab Republic",
"Taiwan, Province of China",
"Tajikistan",
"Tanzania, United Republic of",
"Thailand",
"Timor-Leste",
"Togo",
"Tokelau",
"Tonga",
"Trinidad and Tobago",
"Tunisia",
"Turkey",
"Turkmenistan",
"Turks and Caicos Islands",
"Tuvalu",
"Uganda",
"Ukraine",
"United Arab Emirates",
"United Kingdom",
"United States",
"United States Minor Outlying Islands",
"Uruguay",
"Uzbekistan",
"Vanuatu",
"Venezuela",
"Viet Nam",
"Virgin Islands, British",
"Virgin Islands, US",
"Wallis and Futuna",
"Western Sahara",
"Yemen",
"Zambia",
"Zimbabwe",
};

        for (int i = 0; i < countryArray.Length; i++)
        {
            if (address.Contains(countryArray[i]))
            {
                countryReturn = countryArray[i];
            }
            else
            {
                countryReturn = "United States";
            }
        }

            return countryReturn;

    }
}

Ответы [ 3 ]

3 голосов
/ 28 января 2020

Это происходит потому, что ваш код продолжает работать даже после того, как он нашел правильный адрес в массиве

for (int i = 0; i < countryArray.Length; i++)
    {
        if (address.Contains(countryArray[i]))
        {
            countryReturn = countryArray[i];
            break;
        }
        else
        {
            countryReturn = "United States";
        }
    }

Поместите разрыв в условие If после того, как вы присвоили значение для возврата.

Или вы могли бы сделать что-то вроде

countryReturn = "United States";
for (int i = 0; i < countryArray.Length; i++)
        {
            if (address.ToUpper() == countryArray[i].ToUpper())
            {
                countryReturn = countryArray[i];
                break;
            }
        }

, используя разрыв во втором подходе, чтобы убедиться, что как только запись найдена, l oop завершается и не запускается дальше. Также я хотел бы предложить еще одно изменение вместо использования содержимого вы должны использовать равное .ToUpper() с обеих сторон. Но эта проверка только для одной записи и одного <p>. Если вы хотите проверить несколько элементов, то вам нужно сохранить массив совпадающих адресов

1 голос
/ 28 января 2020

Вы можете использовать метод (.Contains), чтобы проверить, есть ли в вашем тексте указанная строка c или нет

0 голосов
/ 28 января 2020

Я думаю, что вы ищете в вашей статистике c string Страна

public static string Country(string address)
{
    string countryReturn = string.Empty;
    string[] countryArray = {"...", "..."};

    countryReturn = countryArray.FirstOrDefault(search => address.Contains(search));

    //if you dont want to have the possibility return a empty string do
    if(string.IsNullOrEmpty(countryReturn))
        countryReturn = "Your Fallback";

    return countryReturn;
}

Надеюсь, вы видите, что вам не нужно возвращать переменную в каждом случае здесь

Так что кратчайший путь без проверки, является ли возвращение пустой строкой

public static string Country(string address)
{
    string[] countryArray = {"...", "..."};
    return countryArray.FirstOrDefault(search => address.Contains(search));
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...