Как проверить, присутствует ли элемент / текст в списке с помощью Selenn Webdriver C # - PullRequest
0 голосов
/ 24 января 2019

Я уверен, что этот вопрос, возможно, задавался раньше, но мне кажется, что здесь ничего не работает.Мне нужно создать простой цикл, который проходит по списку и ищет определенный текст.Когда текст найден, его следует удалить, но если его нет, его можно добавить.Ниже приведен код, который я создал.текст, который я ищу, присутствует в списке, но кажется, что он проходит без определения, существует ли текст.

IList<IWebElement> boxList = _driver.FindElements(By.Id("ListBox"));
foreach (IWebElement i in boxList)
{
   //Assert.AreEqual(i.Text, boxList.Contains("TEST"));

   if (i.Text.Contains("TEST"))
   {
      // value is present in box list
   }
   else
   {
      _driver.FindElement(By.Id("AddButton")).Click();
      var newRecordInfo = table.CreateSet<FeatureInfo>();
      foreach (var recordData in newRecordInfo)
      {
            _driver.FindElement(By.Id("DesTextBox")).SendKeys(recordData.Test_discription);
            _driver.FindElement(By.Id("ScoreTextBox")).SendKeys(recordData.Test_score);

         new SelectElement(_driver.FindElement(By.Id("TypeDropDown"))).SelectByValue("1");
         _driver.FindElement(By.Id("SaveButton")).Click();
      }
   }
}

Вот HTML:

<select size="10" name="ListBox" id="ListBox" onclick="ListBox_Click()" style="width:98%;display:block;margin-bottom:10px">
        <option value="10" UseCount="0" Score="170" FirearmType="2">TRAINING</option>
        <option value="9" UseCount="0" Score="0" Type="1">TRAINING ONE</option>
        <option value="12" UseCount="0" Score="0" Type="1">TRAINING TWO</option>
        <option value="5" UseCount="5" Score="0" FirearmType="2">TRAINING THREE</option>
        <option value="1" UseCount="31" Score="225" Type="1">TRAINING FOUR</option>     
        <option value="1" UseCount="0" Score="50" Type="1">TEST</option>

1 Ответ

0 голосов
/ 24 января 2019

Кажется, что ваша начальная проверка элемента неверна.Поправьте меня, если я ошибаюсь, но:

IList<IWebElement> boxList = _driver.FindElements(By.Id("ListBox"));

возвращает только один элемент?Если вам нужен список элементов option, вы захотите добавить тег option в проверку FindElements.

IList<IWebElement> boxList = _driver.FindElements(By.CssSelector("select#ListBox option"));

С этим списком элементов он должен вернуть список каждого отдельного элемента option,получить текст каждого.

РЕДАКТИРОВАТЬ

В соответствии с моим комментарием ниже, я думаю, что проблема заключается в том, что вы делаете проверку текста идобавьте для каждого тега параметра, но функциональность, которую вы ищете, заключается в том, что добавление выполняется только после проверки всех параметров.

IList<IWebElement> boxList = _driver.FindElements(By.CssSelector("select#ListBox option"));
bool textExists = false;

foreach(var option in boxList)
{
    if(option.Text.Contains("TEST"))
    {
        textExists = true;
        break;
    }
}

if(!textExists)
{
    _driver.FindElement(By.Id("AddButton")).Click();
    var newRecordInfo = table.CreateSet<FeatureInfo>();

    foreach (var recordData in newRecordInfo)
    {
         _driver.FindElement(By.Id("DesTextBox")).SendKeys(recordData.Test_discription);
         _driver.FindElement(By.Id("ScoreTextBox")).SendKeys(recordData.Test_score);

         new SelectElement(_driver.FindElement(By.Id("TypeDropDown"))).SelectByValue("1");
         _driver.FindElement(By.Id("SaveButton")).Click();
    }
}

EDIT V2 - обновлена ​​проверка bool

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