通过绕过 UI 优化 Selenium 测试

Optimizing Selenium tests by bypassing UI

对于那些需要在测试之前和(或)之后执行的操作,有没有办法绕过 UI?是否可以向同一个测试会话发送简单的 GET 或 POST 请求,而不是在测试中编写脚本?

例如,我想写一个测试,检查记录是否可以被删除。为此,首先我需要创建记录。通过 UI 似乎不是一个好的选择,因为它不是测试本身的一部分。

您可以通过在页面中执行一些 Javascript 来完成几乎所有事情。 以下是使用 Javascript 调用发送 HTTP 请求的示例:

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("https://www.google.com")

driver.execute_script("""
  var r = new XMLHttpRequest();
  r.open('POST', '/search', 0);
  r.setRequestHeader('Content-type','application/x-www-form-urlencoded');
  r.send('q=bill+material&output=xml&client=test&site=operations&access=p');
  return r.responseText;
  """)

虽然以这种方式设置测试可能很诱人,但我不推荐这样做,因为它会为 UI 创建新的依赖关系,增加复杂性,从而增加测试维护成本.

这真的取决于被测应用程序。您可能不想对数据库进行 SQL 调用来创建这些记录,除非您真的知道自己在做什么。即使这样,当记录发生变化时,它也会使您的测试自动化中断。

也许您的测试应用程序提供了一个 API 允许您创建目标记录。这将是理想的,允许您发出 API 请求,然后您在 UI 中所要做的就是导航到 "user" 将删除它的位置。