我刚刚开始从事硒工作,并且在某些方面陷入困境,需要专家的帮助。
这是我的HTML
<div id='d3_tree'>
<svg>
<g transform="translate(20,50)>
<g class='node'>
</g>
<g class='node pe_node'>
</g>
<g class='node pe_node'>
</g>
</g>
</svg>
</div>
我需要让所有<g>
拥有类pe_node
并在这些<g>
上调用上下文菜单
我试图像这样获得svg
node = self.driver.find_elements(By.XPATH, "//div[@id='d3_tree']/'svg']/g")
然后我读到svg无法直接选择所以我试过这个
nodes = self.driver.find_elements(By.XPATH, "//div[@id='d3_tree']/*[name()='svg']/g")
和
nodes = self.driver.find_elements(By.XPATH, "//div[@id='d3_tree']/*[local-name()='svg']/g")
但它仍然不适合我,我的结果是[]
。
任何人都可以指导我如何在svg
中选择带有类pe_node的<g>
任何帮助将不胜感激
由于
答案 0 :(得分:4)
你在那里,以下应该有效:
nodes = self.driver.find_elements(By.XPATH, "//div[@id='d3_tree']/*[name()='svg']/*[name()='g']")
'svg'中的每个元素都必须被引用为`/ * [name()='']
在这种情况下,你可以用以下方法缩短它:
nodes = self.driver.find_elements(By.XPATH, "//div[@id='d3_tree']/*/*[name()='g']")
答案 1 :(得分:0)
以下xpath应该有效//div[@id='d3_tree']//g[contains(@class, 'pe_node')]
答案 2 :(得分:0)
您是否可以使用<svg>
?
tagName
元素
node = driver.findElement(By.tagName("svg"))
otherNodes = node.findElements(By.Xpath("./g[contains(@class, 'pe_node')]")
答案 3 :(得分:0)
你可以尝试这个,我不知道你正在使用哪种语言。但是下面的selenium可能会对你有所帮助。节点将返回svg标签下的所有元素,其类为“node pe_node”。
node = self.driver.find_element(By.XPATH, "//div[@id='d3_tree']/svg]")
nodes = node.find_elements(By.XPATH,"//g[@class='node pe_node']")
答案 4 :(得分:0)
您可以这样写:
//div[@id='d3_tree']/*[name()='svg']/*[name()='g' and @class='node pe_node']/*[name()='g'][2]