weixin_42636397 2018-11-27 21:39 采纳率: 100%
浏览 4904
已采纳

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

这个下拉框不是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写的不对 无法定位到下拉列表里的值 还是这个方法本身有问题呢?如果此控件不支持,为什么又可以点开下拉框呢,而且键盘操作也不行,这一点很匪夷所思

  • 写回答

3条回答 默认 最新

  • 忧郁的梧桐树叶 2018-11-28 00:47
    关注

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

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

    希望有帮助。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 【可追加酬金】宝塔部署买的php代码,ip访问正常,域名访问部分页面出现代码和数据库里都没有内容
  • ¥15 关于正则表达式中{}
  • ¥15 2台电脑 连一个网 隔几个小时同时掉线一次
  • ¥15 libreoffice C++开发环境构建
  • ¥20 找个会对接京东云鼎的技术人员,留下你的方式!
  • ¥15 一个代码问题,怎么打开,并且试运行
  • ¥15 cc2530音乐代码
  • ¥15 我进入WindowS 11安全模式后,需要重新设密码才能进电脑,然后重新设密码又需要网络,安全模式又不能使用网络,该如何解决
  • ¥30 有人能远程帮看一下吗
  • ¥15 初学者java安卓开发soket问题