我为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>
答案 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();