如何识别其ID动态变化且硒中没有其他属性的元素?

时间:2018-10-04 08:19:28

标签: selenium selenium-webdriver xpath css-selectors webdriverwait

我为kendo下拉列表提供了此html正文,该下拉列表仅具有一个属性,即id是动态变化的,我如何确定每个页面上的该对象的刷新准确度。 对于其他下拉菜单,其他属性(如class和tab索引)已经在同一页面上多次出现相同的值-

<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 :(得分:1)

如果下拉列表中始终存在一个值,则可以尝试通过文本或其他方式找到该值,然后获取父级: XPath: Get parent node from child node

其他方法是通过结构的xpath来获取它,例如:div [3] /.../ span等。这并不好,因为每次更改都可能使您的测试失败,但是如果您没有其他选择,那么您可能想尝试一下。

答案 1 :(得分:1)

要单击具有唯一属性文本为 2018 ALBERTSONS /饮料混合物的元素,您需要诱使 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();
    

答案 2 :(得分:0)

我找到了一种解决方法来定位元素:

首先使用以下文本获取下拉列表中span标签的xpath: // text()[包含(。,'2018')] 因为'2018'是常见的,而与相邻文本无关

然后向上移动到下拉菜单的父标签,以找到可以在单击时折叠的下拉框架: //text()[contains(.,'2018')] / parent :: / parent ::

然后只需单击所位于的元素。 driver.findElement(By.xpath(“ // text()[contains(。,'2018')] / parent :: / parent :: ”))。click();