Python中如何编写一个基于Selenium的自动化测试程序?

用 python 写了一个 selenium 的自动化测试程序,基本就是登陆网站,浏览,点击,然后截图。按照道理来说,这个应该就是能够自己循环之行,不需要人工干预了。但是发现如果鼠标不在页面上晃动,程序就会超时死掉(找不到元素报错)。如果鼠标长期不动,程序就死了。如果看到程序停止了,在页面上移动一下,程序又开始工作了。这是什么原因呢?测试环境为 selenium+chrome+win10 远程桌面。


Python中如何编写一个基于Selenium的自动化测试程序?
17 回复

Selenium 有个拖动的事件,可以试试。另外不懂你这个测试什么网站,按照你说的,灯具网站浏览,也会和网站发生交互的


from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 1. 初始化浏览器驱动
driver = webdriver.Chrome()  # 需要先安装对应浏览器的驱动

# 2. 打开目标网页
driver.get("https://www.baidu.com")

# 3. 定位元素并操作
try:
    # 等待搜索框加载完成
    search_box = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "kw"))
    )
    
    # 输入搜索关键词
    search_box.send_keys("Selenium自动化测试")
    
    # 模拟点击搜索按钮
    search_button = driver.find_element(By.ID, "su")
    search_button.click()
    
    # 等待搜索结果加载
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "result"))
    )
    
    # 获取搜索结果标题
    results = driver.find_elements(By.CSS_SELECTOR, "h3.t a")
    print(f"找到 {len(results)} 条结果:")
    for i, result in enumerate(results[:5], 1):
        print(f"{i}. {result.text}")
    
    # 4. 截图保存
    driver.save_screenshot("search_results.png")
    
except Exception as e:
    print(f"执行过程中出现错误: {e}")
    
finally:
    # 5. 关闭浏览器
    time.sleep(2)  # 等待2秒观察结果
    driver.quit()

核心步骤说明:

  1. 安装必要组件:pip install selenium 并下载对应浏览器驱动
  2. 初始化WebDriver创建浏览器实例
  3. 使用定位器(ID、CSS选择器、XPath等)找到页面元素
  4. 通过send_keys()、click()等方法模拟用户操作
  5. 使用显式等待确保元素加载完成
  6. 最后记得调用quit()释放资源

建议用pytest组织测试用例更规范。

感谢提示。您说的是 DRAG 那个?让浏览器动一下?
登陆网站倒是有交互,正常进行。
就是停留在某个页面不断发文字提交,然后截屏的时候会发生问题。如果“人”不去移动鼠标,就会出现等待元素超时。如果移动了鼠标,程序执行会明显提速。

感觉如果鼠标不在页面上移动,写的自动测试程序会失去焦点?还是 休眠?有点太智能了。

moveto 是从令坐标开始移动吗?会不会移动过去太慢了?

“长期不动”、“程序死了”之后是报的什么错误呢?

长期不动—鼠标长期不活动。
程序死掉报错:找不到元素。但是如果在超时之前动一下鼠标,程序会加速执行。


需要添加到程序里面这个动作?我总感觉我这个程序的问题是需要一个外部刺激呢?程序里面本身有一个 moveto 和 click 的动作。就是总是需要一个“人”来晃动鼠标的动作。

因为这个自动化测试程序总是需要人来晃动鼠标才能“刺激”他运行,有点觉得自己写了一个假的自动化测试程序

firefox 怎么样?

能不能再根据这个找不到的元素仔细分析一下自动化测试代码和所测试的页面?我以前也认为 selenium 相当不稳定,但是后来发现很多时候是我自己对前端不够了解,测试代码写得不够健壮。

远程桌面我记得我遇到过这个问题,启动程序后关掉远程就可以了。如果不行,你可以起个 Seleniumserver 端,然后本地跑一下。

话说确实 selenium 是个好包,稳定。不过我遇到的问题可能和 code

使用了 firefox 效果一样。

我启动程序,试试关闭远程能不能一直执行。
这个远程好奇怪

关闭远程也会断。

这可如何是好呢?即使本地机器也有锁屏的时候啊,这样就失去了焦点,就断了。

应该是远程的原因, 你不远程就没这问题

回到顶部