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

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条)

报告相同问题?

悬赏问题

  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复