• 售前

  • 售后

热门帖子
入门百科

Python+Selenium定位不到元素常见缘故原由及办理办法(报:NoSuchElementExcepti

[复制链接]
升密示 显示全部楼层 发表于 2021-10-26 12:44:31 |阅读模式 打印 上一主题 下一主题
在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的环境(报selenium.common.exceptions.NoSuchElementException),一样平常可以从以下几个方面着手办理:

1.Frame/Iframe原因定位不到元素:


这个是最常见的原因,首先要明白下frame的实质,frame中实际上是嵌入了另一个页面,而webdriver每次只能在一个页面辨认,因此必要先定位到相应的frame,对谁人页面里的元素举行定位。

办理方案:

假如iframe有name或id的话,直接使用switch_to_frame("name值")或switch_to_frame("id值")。如下:
  1. driver=webdriver.Firefox()
  2. driver.get(r'http://www.126.com/')
  3. driver.switch_to_frame('x-URS-iframe') #需先跳转到iframe框架
  4. username=driver.find_element_by_name('email')
  5. username.clear()
复制代码
假如iframe没有name或id的话,则可以通过下面的方式定位:
  1. #先定位到iframe
  2. elementi= driver.find_element_by_class_name('APP-editor-iframe')
  3. #再将定位对象传给switch_to_frame()方法
  4. driver.switch_to_frame(elementi)
复制代码
假如完成操纵后,可以通过switch_to.parent_content()方法跳出当前iframe,或者还可以通过switch_to.default_content()方法跳回最外层的页面。

2.Xpath形貌错误原因:

由于Xpath层级太复杂,容易犯错。但是该定位方式可以或许有用定位绝大部分的元素,建议把握。

办理方案:

2.1可以使用Firefox的firePath,复制xpath路径。该方式容易由于层级改变而必要重新编写过xpath路径,不建议使用,初学者可以先复制路径,然后实验去修改它。

2.2提高下写xpath的程度。

可以详看笔者另外一篇博文总结:Selenuim+Python之元素定位总结及实例说明
该博文具体总结了Xpath的使用,多组合定位一样平常都能实现定位问题。

怎样查验编写的Xpath是否精确?编写好Xpath路径,可以直接复制到搜狐浏览器的firebug查看html源码,通过Xpath搜索:如下红色框,若无报错,则说明编写的Xpath路径没错。
  1. find_element_by_xpath("//input[@id='kw']")
复制代码
3.页面还没有加载出来,就对页面上的元素举行的操纵:

这种环境一样平常说来,可以设置等待,等待页面体现之后再操纵,这与人手工操纵的原理一样:
3.1设置等待时间;缺点是必要设置较长的等待时间,案例多了测试就很慢;
3.2设置等待页面的某个元素出现,好比一个文本、一个输入框都可以,一旦指定的元素出现,就可以做操纵。
3.3在调试的过程中可以把页面的html代码打印出来,以便分析。

办理方案:
导入时间模块。
  1. import time
  2. time.sleep(3)
复制代码
4.动态id定位不到元素:

办理方案:
假如发现是动态id,直接用xpath定位或其他方式定位。
5.二次定位,如弹出框登录

如百度登录弹出框登录百度账号,需先定位到百度弹出框,然后再定位到用户名密码登录。
  1. # coding=utf-8
  2. '''
  3. Created on 2016-7-20
  4. @author: Jennifer
  5. Project:登录百度账号
  6. '''
  7. from selenium import webdriver
  8. import time
  9. driver = webdriver.Firefox()
  10. driver.get("http://www.baidu.com/")
  11. time.sleep(3)
  12. #点击登录:有些name为tj_login的元素为不可见的,点击可见的那个登录按钮即可。
  13. #否则会报:ElementNotVisibleException
  14. element0=driver.find_elements_by_name("tj_login")
  15. for ele0 in element0:
  16.   if ele0.is_displayed():
  17.     ele0.click()
  18. #在登录弹出框,需先定位到登录弹出框
  19. #否则会报:NoSuchElementException
  20. element1=driver.find_element_by_class_name("tang-content")
  21. element11=element1.find_element_by_id("TANGRAM__PSP_8__userName")
  22. element11.clear()
  23. element11.send_keys("登录名")
  24. element2=element1.find_element_by_id("TANGRAM__PSP_8__password")
  25. element2.clear()
  26. element2.send_keys("密码")
  27. element3=element1.find_element_by_id("TANGRAM__PSP_8__submit")
  28. element3.click()
  29. element3.submit()
  30. try:
  31.   assert "登录名" in driver.page_source
  32. except AssertionError:
  33.   print "登录失败"
  34. else:
  35.   print "登录成功"
  36.   time.sleep(3)
  37. finally:
  38.   print "测试记录:已测试"
  39. driver.close()
复制代码
补充:报:selenium.common.exceptions.ElementNotVisibleException

代码:
  1. from selenium import webdriver
  2. from PIL import Image
  3. import time
  4. import pandas as pd
  5. import datetime
  6. driver = webdriver.Ie(r"C:\Program Files\internet explorer\IEDriverServer2.exe")
  7. driver.get("https://www.cib.com.cn/cn/minipage/page/login-firmalert.html")
  8. print("请输入用户名和帐号密码,实现登录")
  9. input("====按任意键继续====")
  10. # print(driver.current_url) # https://corporatebank.cib.com.cn/firm/main/mainx.do
  11. frame = driver.find_element_by_id("workframe") # 切换到 iframe 标签中查找
  12. driver.switch_to_frame(frame) # 切入 iframe 标签
  13. # driver.switch_to_default_content()  # 切出 iframe 标签 也可以 直接 默认的
  14. driver.find_element_by_xpath('//div[@id="fast-way"]/ul/li[2]/a').click() # 点击 当日明细查询按钮
  15. time.sleep(2)
  16. try:
  17.   driver.find_element_by_xpath('//div[@id="fast-way"]/ul/li[2]/a').click() # 点击 当日明细查询按钮
  18. except Exception as e:
  19.   print("=======双击这个按钮========", e)
  20. time.sleep(3)
复制代码
到此这篇关于Python+Selenium定位不到元素常见原因及办理办法(报:NoSuchElementException)的文章就先容到这了,更多相关Python+Selenium定位不到元素内容请搜索草根技术分享以前的文章或继续浏览下面的相关文章渴望各人以后多多支持草根技术分享!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作