Xpath中的嵌套谓词

时间:2018-10-19 14:09:36

标签: selenium selenium-webdriver xpath

enter image description here

我正在尝试通过

访问div节点
//div[@data-full='2018-1-15']

通常,我只是按Xpath搜索并抓住此节点。但是,该站点的性质是有许多具有此属性的节点,并且只有一个是可单击的。

因此,我必须抓住

//div[@class='dw-cal-slide dw-cal-slide-a'] 

节点,然后下台。我知道我正在尝试做这样的事情:

下移一个节点:

//div[@class='dw-cal-slide dw-cal-slide-a']/div/

然后搜索具有属性的自有子节点的子节点

//div[@data-full='2018-1-15']. 

语法有问题。任何帮助都会很棒!

2 个答案:

答案 0 :(得分:3)

尝试

//div[contains(@class, 'dw-cal-slide') and contains(@class, 'dw-cal-slide-a')]//div[@data-full='2018-1-15']

但是恕我直言,最好使用CSS选择器(较短的表达式)

div.dw-cal-slide.dw-cal-slide-a div[data-full='2018-1-15']

如果要在两条代码行中找到祖先和后代div,则可以使用( Python示例

ancestor = driver.find_element_by_xpath("//div[contains(@class, 'dw-cal-slide') and contains(@class, 'dw-cal-slide-a')]")

descendant = ancestor.find_element_by_xpath(".//div[@data-full='2018-1-15']")

答案 1 :(得分:0)

正如您所说,有多个具有相同属性的节点,并且只有一个可单击。您可以通过选中isEnable单击该节点。您可以尝试跟随兄弟姐妹或跟随兄弟姐妹的其他事情。可以在以下stackoverflow链接上找到示例:

How to use XPath preceding-sibling correctly