Selenium自动化常见问题
Selenium
是最流行的web端自动化测试框架之一,用于自动执行用户对被测产品的操作。Selenium
是开源的,Selenium
框架的核心组件是Selenium WebDriver
。 Selenium WebDriver
允许使用者在不同的浏览器(例如Chrome,Firefox,Internet Explorer,Microsoft Edge等)上执行测试用例。使用Selenium WebDriver
的主要优点是它支持.NET
,Java
,C#
,Python
等。可以参考有关Selenium WebDriver
体系结构的官方文档以了解更多信息。
尽管Selenium
简化了Web网站或Web
应用程序的测试,但测试开发人员在使用框架时面临着许多Selenium
自动化挑战。让我们看一下Selenium Automation
中面临的一些最常见挑战及其比较不错的解决方案。
误报成功和误报失败
误报成功也是测试结果成功的一种情况,即使实际情况并非如此。反之亦然,误报失败是测试失败一种情况,即使一切都按预期进行,测试结果也会报告脚本执行过程中出现错误。误报对自动化测试一直是最大的挑战,当然Selenium
也不例外。
当测试工程师通过Selenium
脚本运行成百上千的测试用例时,可能会遇到一些不稳定的测试,这些测试显示误报。如果长时间不处理,可能会导致整个自动化测试项目失去价值,从而使测试人员的自动化测试脚本沦为“废物”。
测试脚本的稳定性无疑是Selenium
自动化中最常见的挑战之一。目前通用的解决办法依然缺少,但从过往工作经验来看,测试左移,独立测试环境,统计脚本误报率等等从流程上来解决这个难题是一个不错的思路。
等待网页加载JavaScript
现在很多网站包含需要JS
异步加载Web
元素,例如基于用户选择的下拉列表。则Selenium
脚本在运行时可能会在这些Web
元素时突然失效。发生这种情况是因为WebDriver
没有处理网页完全加载所花费的时间。为了处理页面加载的Selenium
自动化中的异步加载的问题,需要使WebDriver
等到该页面的完整JavaScript
加载完成之后再进行操作。在任何网页上执行测试之前,您应确保该网页(尤其是带有很多JavaScript
代码的网页)的加载已完成。您可以使用readyState
属性,该属性描述文档/网页的加载状态。document.readyState
状态为complete
表示页面/文档的解析已完成。
''' 在此示例中,我们将pytest框架与Selenium一起使用 '''
import pytest
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from time import sleep
from contextlib import contextmanager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.expected_conditions import staleness_of
@pytest.fixture(params=["chrome"],scope="class")
def driver_init(request):
if request.param == "chrome":
web_driver = webdriver.Chrome()
request.cls.driver = web_driver
yield
web_driver.close()
@pytest.mark.usefixtures("driver_init")
class BasicTest:
pass
class Test_URL(BasicTest):
def test_open_url(self):
self.driver.get("https://www.*