Xpath / Selenium-在简单的dom下,如何获取<select>中的所有选项(默认值除外)?

时间:2019-03-08 20:55:10

标签: selenium xpath

使用codeceptjs / selenium进行自动化测试时,我需要读取选择下拉列表中的节点的文本,而不需要提前知道它们的内容,并且不使用灰色的默认选项(因为该应用程序必须先进行选择才能运行制造)。 给定上述简单的dom,问题是如何编写一个xpath来捕获包含6 8 10和12的所有4个选项节点。另一个xpath返回所有4个选项节点a b c和d。 这是我的无效尝试: .//option/preceding::option[text()=“什么类型?”] / following :: option [text()=“有多少?”] .//option/following::option[text()=“有多少个?”] / preceding :: option [text()=“什么类型?”] .//option/preceding::option[text()=“什么类型?”]和以下::: option [text()=“有多少?”] .// option / [在前:: option [text()=“什么类型?”]和以下:: option [text()=“有多少?”]] 前两次尝试仅对我返回节点“多少”,而下一次尝试无效。 xpath查询的输出应返回除默认节点以外的每个选项节点。 那个xpath被放入一个读取节点文本的函数中,它看起来像这样:   getElementsText(locator){     让driver = this.helpers.Protractor.browser;     返回driver.element.all(locator).getAttribute(“ textContent”)。then((result)=> {       返回result.toString()。split(',');     });   }

3 个答案:

答案 0 :(得分:1)

这里是CSS,它将获取除默认选项以外的所有选项。

第一个列表:

select#itemname1 option:not(:first-child)

第二个列表:

select#itemname2 option:not(:first-child)

答案 1 :(得分:1)

根据此option中默认文本(显示值)获取所有select元素:

//select[option[text()="How Many?"]]/option[not(@class="greydefault")]

根据父级select的ID获取所有信息:

//select[@id="itemname2"]/option[not(@class="greydefault")]

在两种情况下,您都首先找到select元素-在第一个元素中,有一个带有该文本的子元素option的元素;第二个-具有该ID的ID,然后获取所有不具有class值的子代(直接后代)。

答案 2 :(得分:0)

令我非常困惑的是,这正在尝试获取第二个列表中不包含默认选项的选项,但是当我阅读本文时,我认为它应该获取不包含默认值的第一组选项。

.//option[following::option[text()="How Many?"] and preceding::option[text()="What Type?"]]