weixin_42636397
weixin_42636397
采纳率100%
2018-11-28 05:39

selenium无法定位非select的下拉框元素,请大神指教

5
已采纳

这个下拉框不是select型的下拉框,所以不能用select_by_index("")的方法去定位,只能一步一步去点,我先用xpath找到下拉框,用此语句self.driver.find_element_by_xpath(“A”).click()可以点开下拉框(A为该下拉框的XPATH) ,并且展示里面的列表,但是再用self.driver.find_element_by_xpath(“//*[@id="cdk-overlay-3"]/div/div/ul/li[1]”).click()去点里面的某个值(括号里为下拉框里某个值得xpath),总是报错,后来尝试用键盘上下键来操作,如send_keys(Keys.DOWN)也报错,求大神看看到底问题出在哪
下面是html的截图,
图片说明
下拉框的值好像都隐藏了,点击标签展开看得到对应的值,我是直接点击那一行,如第一行“给水”右键复制的xpath为//*[@id="cdk-overlay-3"]/div/div/ul/li[1]
图片说明
到底是xpath写的不对 无法定位到下拉列表里的值 还是这个方法本身有问题呢?如果此控件不支持,为什么又可以点开下拉框呢,而且键盘操作也不行,这一点很匪夷所思

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • hb5cn 忧郁的梧桐树叶 3年前

    首先,请不要偷懒使用chrome自带的copy xpath。做web自动化,xpath的基础是要有的。
    其次,截图较少,但是仍然可以看出来,这个下拉菜单中的节点还是比较容易定位的。我们要利用好需要定位的节点的上下文中有唯一属性的节点来辅助定位。
    从图1中可以模糊的看到,在“给水”节点上方的ul父节点有一个属性role="menu"比较特殊,那么就可以围绕着这个点来进行定位,那么“给水”这个节点的xpath就应该是:
    //ul[@role="menu"]/li[contains(text(),"给水")]

    那么在你点开下拉菜单后,就可以尝试用这个xpath去点击这个节点。

    希望有帮助。

    点赞 4 评论 复制链接分享
  • weixin_42636397 weixin_42636397 3年前

    多谢楼上的指点,我已经找到解决办法了,是xpath定位不对,右键复制的xpath为//*[@id="cdk-overlay-3"]/div/div/ul/li[1],其中id="cdk-overlay-3"这个是动态的生成的,所以定位不到,最后用 //*[@class="ant-select-dropdown-menu-item ng-star-inserted"][1] 这个xpath来定位就好了

    点赞 1 评论 复制链接分享