当前位置: 首页 > 知识库问答 >
问题:

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

鲁烨熠
2023-03-14

我有一个剑道下拉列表的html正文,它只有一个属性,即id,它是动态变化的,如何在每个页面刷新时准确地识别这个对象。对于其他下拉列表,类和选项卡索引等其他属性已在同一页面上多次显示相同的值-

<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个答案

田化
2023-03-14

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

首先使用下拉列表中的文本获取span标记的xpath,如下所示:://text()[包含(,'2018')],因为无论相邻文本如何,“2018”都是常见的

然后向上移动到下拉列表的父标记以找到可以在单击时折叠的下拉框://text()[包含(.,'2018')]/父::/parent::

然后只需单击所定位的元素。驾驶员findElement(按.xpath(“//text()[包含(,'2018')]/父项::/parent:”)。单击();

童华池
2023-03-14

要单击属性文本为2018 ALBERTSONS/Beverage Mixes的元素,您需要引导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();
    

  • 越学义
    2023-03-14

    如果下拉列表中有一个始终存在的值,您可以尝试通过文本或其他方式找到该值,然后获取父节点:XPath:从子节点获取父节点

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

     类似资料:
    • 问题内容: 我有一张表,其中每一行都会有一个下载链接,其中包含(部分)自动生成的id元素。原因是实际的href元素始终为“#”,因此ID分开了下载。 我需要在td中找到该id元素的名称。那就是:我知道表行有一个id元素,并且我知道部分名称,并且我需要获得确切的名称。 我一次访问每一行,因此我一次只需要查看一次即可。无需浏览整个表格。 我知道名称后如何查找元素。但是在我只知道类型的时候找到元素是另一

    • 谁能告诉我如何识别和切换到只有标题的iframe? 我试过下面的代码,但它不起作用

    • 当我显示客户的ID时,我会得到错误消息。我也试图更改属性'id'的名称,但出现了相同的错误与新名称。 HTTP状态500-内部服务器错误 类型异常报告消息内部服务器错误描述服务器遇到内部错误,导致它无法完成此请求。 异常org.apache.jasper.jasperException:javax.el.PropertyNotFoundException:类“de.java2Enterprise.

    • 我有一个html代码段,如下所示: 如您所见,每个列表元素都包括标记。这对所有元素都是相同的。 这是一个动态创建的列表,id-tag和label文本将有所不同(但数据选择器将始终相同)。 对于Selenium来说,最好的方法是什么来完成这些操作,并列出所有的id标签或标签文本?

    • 问题内容: 请查看下面的html代码段: 当td [1]包含“ Single”时,我试图声明td [2]的值。我试过以下的各种变体: //td[2][(contains(text(),’£14.00’))]/../td[1][(contains(text(),’Single’))]] 我已经在其他地方成功使用了类似的符号-但在这里无济于事…我认为这取决于td [1]具有嵌套元素,但不确定。 有人能

    • 在下面的代码中,我想使的“checked”属性动态化。显然,是一个布尔值。编译在的开始处失败,错误为