Selenium+python常见问题,闪退,找不到元素

1、闪退问题:

由于缺少浏览器对应驱动。谷歌:chromedriver驱动;火狐:geckodriver驱动

查看Chrome版本
Selenium+python常见问题,闪退,找不到元素_第1张图片
查找Chrome和ChromeDriver的对应关系
打开Chrome,在设置 – 关于Chrome下载对应ChromeDriver

ChromeDriver下载地址:

http://chromedriver.storage.googleapis.com/index.html

选择对应版本的ChromeDriver下载

Selenium+python常见问题,闪退,找不到元素_第2张图片
火狐驱动下载时需注意:先查看自己安装浏览器版本,在驱动官方下载对应版本驱动下载完成后,需放在python安装目录下的Scripts文件下,后重启项目,部分电脑需重启电脑。

2、找不到元素分为几种状况:

(1)缺少驱动

缺少驱动:根据上述1、下载驱动,即可。

(2)页面嵌套

查看元素所属标签上方是否存在iframe标签,或者新的、等标签,如存在,就需使用先进入新页面再查找元素。

参考阅读:Selenium常见问题——定位子窗口(frame)内元素失败

(3)页面元素未加载

出现这个问题是由于页面存在异步加载的情况,在网页上,页面已经展示出来,但实际元素,还未加载完成,就去查找元素进行操作,就会造成元素未找到,进而保持错,那么如何避免这种情况呢,那就是等待,强制等待或者隐式等待,等待元素加载完成

强制等待:time.sleep(等待时间)
隐式等待
如果强制等待时间过长,可选择隐式等待,通过添加 implicitly_wait() 方法就可以方便的实现隐式等待;implicitly_wait(30) 的用法应该比 time.sleep() 更智能,后者只能选择一个固定的时间的等待,前者可以在一个时间范围内智能的等待。

# -*- coding:utf-8 -*-
from selenium import webdriver
import time #调入time函数
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.implicitly_wait(30) #智能等待30秒

driver.find_element_by_id("kw").send_keys("python")
driver.find_element_by_id("su").click()

隐式等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。

提醒:隐性等待对整个driver的周期都起作用,所以只要设置一次即可。

(4)浏览器没有设置成最大,导致打开的页面找不到

运行自动化程序时,程序默认打开的浏览器窗口较小,导致后缀栏位显示不足,就会导致找不到对应元素。
解决方法:

只需要在程序打开网站时,设置浏览器最大化。driver.maximize_window()

设置浏览器最大化

# -*- coding:utf-8 -*-
from selenium import webdriver
import time #调入time函数
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")

driver.implicitly_wait(30) #智能等待30秒
driver.maximize_window() #将浏览器最大化

设置浏览器宽度、高度

# -*- coding:utf-8 -*-
from selenium import webdriver
import time #调入time函数
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.implicitly_wait(30) #智能等待30秒

driver.set_window_size(800,500) #设置浏览器宽800、高500显示

学习安排上

如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

在这里插入图片描述

视频文档获取方式:

这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片进群即可自行领取

你可能感兴趣的:(软件测试,selenium,python,自动化测试,测试工程师)