weixin_42636397 2018-11-28 05:39 采纳率: 100%
浏览 4819
已采纳

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 08:47
    关注

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

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

    希望有帮助。

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

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 MATLAB动图问题
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名