51Testing软件测试论坛

标题: selenium如何获取页面左侧树状结构中的根节点 [打印本页]

作者: hustar0102    时间: 2016-5-27 14:34
标题: selenium如何获取页面左侧树状结构中的根节点
如图一,我目的是想点击设计模型这个菜单。问题描述:首先这个树形结构是我新建的,所以这个设计模型位置是不固定的。其次如图二,我通过元素定位发现,设计模型和它的上级菜单jiaozhumingcheng4403不是父子关系,而是平级的。

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

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


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

作者: 掉渣饼    时间: 2016-5-27 16:07
我觉得可以先用driver.find_element_by_id("_easyui_tree_181"),然后在用driver.find_element_by_xpath("")找到那个设计模型
作者: hustar0102    时间: 2016-5-27 16:46
掉渣饼 发表于 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
若尘_51 发表于 2016-5-27 15:48
我也只是猜猜,上面的id = '_easyui_tree_181',应该是指设计模型那个节点。  试试用ID的定位方法试试。

不行 ,ID不固定
作者: 若尘_51    时间: 2016-5-27 17:08
(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

作者: hustar0102    时间: 2016-5-30 09:44
若尘_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
value = driver.find_element_by_xpath("//*[@class='tree-title' and text()='jiaozhumingcheng4403']").get_attribute("id")
print value  #打印属性值
作者: hustar0102    时间: 2016-5-30 10:38
若尘_51 发表于 2016-5-30 09:56
value = driver.find_element_by_xpath("//*[@class='tree-title' and text()='jiaozhumingcheng4403']").g ...

试了下 ,没有任何打印,后来发现要打印的是父节点的ID值,本节点没有ID值。我想获取这个图中的id值,怎么获取呢[attach]101339[/attach]
作者: 若尘_51    时间: 2016-5-30 10:56
本帖最后由 若尘_51 于 2016-5-30 11:08 编辑

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

换个方法你试试:(思路大概就是下面那样,语句写得对不对不敢保证)
cssname_values = driver.find_element_by_className(“xxx”);  #应该是得出多个值的
for cssn in cssname_values:
     print cssn
     if  driver.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
若尘_51 发表于 2016-5-30 10:56
我这边没有例子可以试验啊。

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

问题已解决
作者: hustar0102    时间: 2016-5-30 12:06
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[3])+1                                                           #将ID中的数字部分+1
        cid="_easyui_tree_"+str(bid)                                                #重新组成新的ID
        driver.find_element_by_xpath("//*[@id='"+cid+"']/span[5]").click()          #根据xpath点击设计模型

作者: 465046072@qq    时间: 2019-8-27 17:18
找到jiaozhumingcheng4403的父节点的兄弟节点不就完事了吗???!!!




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2