hustar0102 发表于 2016-5-27 14:34:06

selenium如何获取页面左侧树状结构中的根节点

如图一,我目的是想点击设计模型这个菜单。问题描述:首先这个树形结构是我新建的,所以这个设计模型位置是不固定的。其次如图二,我通过元素定位发现,设计模型和它的上级菜单jiaozhumingcheng4403不是父子关系,而是平级的。

我现在可以通过driver.find_element_by_xpath("//*[@class='tree-title' and text()='jiaozhumingcheng4403']").click() 选中jiaozhumingcheng4403这个结点。

求大神给个思路,如何能点击到jiaozhumingcheng4403下面的设计模型

若尘_51 发表于 2016-5-27 15:48:46

我也只是猜猜,上面的id = '_easyui_tree_181',应该是指设计模型那个节点。试试用ID的定位方法试试。

掉渣饼 发表于 2016-5-27 16:07:00

我觉得可以先用driver.find_element_by_id("_easyui_tree_181"),然后在用driver.find_element_by_xpath("")找到那个设计模型

hustar0102 发表于 2016-5-27 16:46:20

掉渣饼 发表于 2016-5-27 16:07
我觉得可以先用driver.find_element_by_id("_easyui_tree_181"),然后在用driver.find_element_by_xpath("") ...

不行的,因为那个树结构是我新建的,所以那个ID 也是变化的

hustar0102 发表于 2016-5-27 16:48:12

若尘_51 发表于 2016-5-27 15:48
我也只是猜猜,上面的id = '_easyui_tree_181',应该是指设计模型那个节点。试试用ID的定位方法试试。

不行 ,ID不固定

若尘_51 发表于 2016-5-27 17:08:32

(1)既然你可以通过driver.find_element_by_xpath("//*[@class='tree-title' and text()='jiaozhumingcheng4403']").click() 选中jiaozhumingcheng4403这个结点。

(2)然后你获取jiaozhumingcheng4403这个节点的id属性

(3)将第二步中的id属性+1   (前提是这个两个节点的ID之间是有规律的)

(4)再通过ID定位的方式进行定位。

SunnyLan 发表于 2016-5-29 10:59:44

:victory::victory::victory::victory:

hustar0102 发表于 2016-5-30 09:44:52

若尘_51 发表于 2016-5-27 17:08
(1)既然你可以通过driver.find_element_by_xpath("//*[@class='tree-title' and text()='jiaozhumingchen ...

谢谢您的回答,我感觉您这个方法可以使用,因为ID 每次都是+1的。 现在有个新的问题,我通过driver.find_element_by_xpath("//*[@class='tree-title' and text()='jiaozhumingcheng4403']").id获取到的id属性是0.8996194829633286-1,而通过F12抓取到对象的属性是_easyui_tree_180,这两种表示方法如何转换呢?

若尘_51 发表于 2016-5-30 09:56:14

value = driver.find_element_by_xpath("//*[@class='tree-title' and text()='jiaozhumingcheng4403']").get_attribute("id")
print value#打印属性值

hustar0102 发表于 2016-5-30 10:38:41

若尘_51 发表于 2016-5-30 09:56
value = driver.find_element_by_xpath("//*[@class='tree-title' and text()='jiaozhumingcheng4403']").g ...

试了下 ,没有任何打印,后来发现要打印的是父节点的ID值,本节点没有ID值。我想获取这个图中的id值,怎么获取呢

若尘_51 发表于 2016-5-30 10:56:35

本帖最后由 若尘_51 于 2016-5-30 11:08 编辑

我这边没有例子可以试验啊。

换个方法你试试:(思路大概就是下面那样,语句写得对不对不敢保证)
cssname_values = driver.find_element_by_className(“xxx”);#应该是得出多个值的
for cssn in cssname_values:
   print cssn
   ifdriver.find_element_by_className(cssn).text()==''jiaozhumingcheng4403'':
         cssn_value = cssn
value = driver.find_element_by_className(cssn_value).get_attribute("id")
print value#打印属性值

hustar0102 发表于 2016-5-30 12:05:14

若尘_51 发表于 2016-5-30 10:56
我这边没有例子可以试验啊。

换个方法你试试:(思路大概就是下面那样,语句写得对不对不敢保证)


问题已解决

hustar0102 发表于 2016-5-30 12:06:08

hustar0102 发表于 2016-5-30 12:05
问题已解决

问题已解决,获取的id是父节点的ID,不是本节点的,你说的方法是正确的      
tt=driver.find_element_by_xpath("//*[@class='tree-title' and text()='"+BuildingName+"']/parent::div").get_attribute("id")#获取父节点div下的ID值
      aid=tt.split('_')                                                         #将ID拆分
      bid=int(aid)+1                                                         #将ID中的数字部分+1
      cid="_easyui_tree_"+str(bid)                                                #重新组成新的ID
      driver.find_element_by_xpath("//*[@id='"+cid+"']/span").click()          #根据xpath点击设计模型

465046072@qq 发表于 2019-8-27 17:18:37

找到jiaozhumingcheng4403的父节点的兄弟节点不就完事了吗???!!!
页: [1]
查看完整版本: selenium如何获取页面左侧树状结构中的根节点