Selenium:使用xpath查找具有特定纯文本的嵌套div

时间:2016-10-22 08:42:31

标签: html selenium xpath

我需要在没有类或id的嵌套div中找到某个文本。

这是html的结构。

<div class="active_row">
  <div class="outcomes">
   <div class="event_outcome" onclick="doSomething">
     <div>Target Text</div>
   </div>
  </div>
</div>

我尝试使用here中的示例直接访问文本。

driver.find_elements_by_xpath("//div[contains(., 'Target Text')]")

这将返回包含目标文本的元素列表,但是当我对它们运行click方法时没有任何反应。

设置此查询以查找文本然后单击event_outcome类的div的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

要选择具有event_outcome类的div,可以在XPath中添加谓词以检查类属性值:

//div[contains(., 'Target Text') and @class='event_outcome']

或添加谓词以检查onclick属性是否存在:

//div[contains(., 'Target Text') and @onclick]

答案 1 :(得分:1)

  

设置此查询以查找文本然后单击带有event_outcome类的div的最佳方法是什么?

您应该尝试使用xpath下面的<div class="event_outcome" onclick="doSomething">,其中Target Text将返回文字element = driver.find_element_by_xpath(".//div[contains(., 'Target Text') and @class='event_outcome']") print(element.text) element.click() ,这将满足您的所有需求,如下所示: -

element = driver.find_element_by_xpath(".//div[normalize-space()='Target Text' and @class='event_outcome']")
print(element.text)
element.click()

或者您也可以使用xpath的normalize-space()函数获得内部文本的完全匹配,如下所示: -

public struct Point
{
    public int x;
    public int y;
}
Point[] directions = new Point[]
{
    new Point() {x=0,y=1 },
    new Point() {x=0,y=-1 },
    new Point() {x=1,y=0 },
    new Point() {x=-1,y=0 }
};