Проверьте порядок HTML элементов со значениями атрибутов, таких как Class = "Group0-Item1" Class = "Group0-Item2" Class = "Group1-Item1" - PullRequest
0 голосов
/ 14 февраля 2020

В моем проекте Selenium / C # / NUNIT мне нужно найти способ проверить порядок (иерархия сверху HTML страницы) для группы HTML элементов (а также элементов, содержащихся в этих элементах). группы). Это мои элементы, которые отображаются внутри моей страницы HTML ...

<div class="gapBanner-banner-order1-group0"></div>
<div class="gapBanner-banner-order1-group1"></div>
<div class="gapBanner-banner-order1-group2"></div>
<div class="gapBanner-banner-order2-group2"></div>

Проверка, которую я хочу выполнить, должна иметь возможность обнаруживать следующие ошибки:

Ошибка 1: Группы не в порядке в пределах страницы HTML. Один из элементов, который находится в group1, появляется первым в HTML перед group0 ...

<div class="gapBanner-banner-order1-group1"></div>
<div class="gapBanner-banner-order1-group0"></div>
<div class="gapBanner-banner-order1-group2"></div>
<div class="gapBanner-banner-order2-group2"></div>

Ошибка # 2: Элементы WITHIN в каждой группе расположены не по порядку в пределах HTML страницы. Group2-Order2 появляется перед Group2-Order1 в пределах HTML

<div class="gapBanner-banner-order1-group0"></div>
<div class="gapBanner-banner-order1-group1"></div>
<div class="gapBanner-banner-order2-group2"></div>
<div class="gapBanner-banner-order1-group2"></div>

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

            /// 5. Verify the correct order of elements in which they appear inside the HTML
            List<IWebElement> CustomPageHTMLComponents = Browser.
            FindElements(By.XPath("//div[contains(@class, 'group')")).ToList();            
            List<IWebElement> uniqueGroups = new List<IWebElement>();
            // Get the unique groups
        for (int i = 0; i < CustomPageHTMLComponents.Count; i++)
        {
            IWebElement currentComponent = Browser.FindElements(By.XPath("//div[contains(@class, 'group')"))[i];
            string toBeSearched = "group";
            string currentComponenetClassAttributeValue = currentComponent.GetAttribute("class");
            int x = currentComponenetClassAttributeValue.IndexOf(toBeSearched);
            string groupNumber = currentComponenetClassAttributeValue.Substring(x + toBeSearched.Length);

            if (groupNumber == i.ToString())
            {
                uniqueGroups.Add(currentComponent);
            }
        }

             // Some kind of logic to verify everything???
        for (int i = 0; i < Page.CustomPageHTMLComponents.Count; i++)
        {
            IWebElement currentComponent = Browser.FindElements(By.XPath("//div[contains(@class, 'group')"))[i];

            string toBeSearched = "group";
            string currentComponenetClassAttributeValue = currentComponent.GetAttribute("class");
            int x = currentComponenetClassAttributeValue.IndexOf(toBeSearched);
            string groupNumber = currentComponenetClassAttributeValue.Substring(x + toBeSearched.Length);

            Assert.AreEqual(groupNumber, i.ToString());
        }

1 Ответ

0 голосов
/ 15 февраля 2020

Вероятно, есть несколько способов сделать это. Это первый способ, которым я придумал ...

  1. Получить все имена классов из нужных элементов и сохранить их в строковом массиве # 1
  2. Сделать копию строкового массива # 1 и сортируйте его
  3. Сравните два массива и, если они равны, то они будут отсортированы, чтобы начать с

Я проверил HTML, который вы указали для ошибок Вы хотели бы поймать, и это ловит их всех. Единственная проблема, о которой я могу подумать: если вы получите более 9 order с или group с, сортировка будет не такой, как вы хотите, потому что это альфа-порядок, а не числовой, например, 1, 10, 2, ... вместо из 1, 2, ... 10.

// capture the class names from the desired classes
string[] elements = _driver.FindElements(By.CssSelector("div[class^='gapBanner-banner-']")).Select(e => e.GetAttribute("class")).ToArray();
// make a copy of the array
string[] sortedElements = new string[elements.Length];
elements.CopyTo(sortedElements, 0);
// sort the copy
Array.Sort(sortedElements);
// compare the arrays for order using NUnit CollectionAssert
CollectionAssert.AreEqual(elements, sortedElements, "Verify ordering of elements");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...