Как определить элемент, чей идентификатор динамически изменяется и не имеет других атрибутов в селене? - PullRequest
0 голосов
/ 04 октября 2018

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

<span role="listbox" unselectable="on" class="k-dropdown-wrap k-state-default" id="dde13a91-2bf3-4e41-af72-bee1b881a8d9" dir="ltr" readonly="false" tabindex="0" aria-disabled="false" aria-readonly="false" aria-haspopup="true" aria-expanded="false" aria-owns="48f666d8-4c3c-43a8-a4dc-8e7a9961a0ef" aria-activedescendant="ca3c4431-3ebf-46c0-9510-a64a32eae108-C.US.0000110896">
            <span unselectable="on" class="k-input">
               <!---->
               <!---->2018 ALBERTSONS / Beverage Mixes
           </span>
           <span unselectable="on" class="k-select">
               <span class="k-i-arrow-s k-icon"></span>
           </span>
           <!---->
        </span>

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Чтобы щелкнуть по элементу с единственным атрибутом-текстом как 2018 АЛЬБЕРТОНЫ / Смеси напитков , необходимо настроить WebDriverWait , чтобы элемент был активным для клика иВы можете использовать следующее решение:

  • (Java) xpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[@class='k-dropdown-wrap k-state-default' and @role='listbox']//span[@class='k-input']"))).click();
    
0 голосов
/ 08 октября 2018

Я нашел обходной путь для определения местоположения элемента:

Сначала получите xpath тега span внутри выпадающего списка, используя его текст, как показано ниже: //text()[contains(.,'2018 ')]поскольку «2018» является обычным независимо от смежного текста

, затем перейдите к родительскому тегу раскрывающегося списка, чтобы найти раскрывающийся кадр, который можно свернуть при щелчке: //text()[contains(.,'2018')] / parent :: / parent ::

, затем просто нажмите на элемент, который находится.driver.findElement (By.xpath ("// text () [содержит (., '2018')] / parent :: / parent :: ")). click ();

0 голосов
/ 04 октября 2018

Если в раскрывающемся списке всегда присутствует текущее значение, вы можете попытаться найти это значение по тексту или что-то еще, а затем получить родительский элемент: XPath: получить родительский узел из дочернего узла

Другой способ - получить его по xpath структуры, например: div [3] /.../ span и т. Д. Это не хорошо, так как каждое изменение может провалиться в вашем тесте, но если у вас нет других вариантов, вы можете захотетьпопробовать это.

...