基于Selenium WebDriver+C#的白俄罗斯铁路网站自动化测试求助
白俄罗斯铁路网站自动化测试实现指南
一、测试步骤总览
1. 谷歌跳转目标站点
- 1.1 打开google.com
- 1.2 在搜索输入框中输入“белорусская железная дорога”
- 1.3 点击"Google Search"按钮
- 1.4 从搜索结果中点击对应目标URL的链接
2. 主页面功能测试
- 2.1 打开目标站点
- 2.2 切换到英文语言
- 2.3 校验「News」板块展示的新闻数量不少于4条
- 2.4 从搜索结果中点击对应目标URL的链接
- 2.5 校验页面底部展示文本“© 2019 Belarusian Railway”
- 2.6 校验页面顶部存在5个按钮:“Press Center”、“Timetable”、“Passenger Services”、“Freight”、“Corporate”
3. 搜索功能测试
打开目标站点后执行以下操作:
- 在“Поиск”输入框中输入20个随机字符,每次执行测试输入的字符需互不相同
- 校验浏览器地址变更为
https://www.rw.by/search/?s=Y&q=前缀 - 校验页面展示文本“К сожалению, на ваш поисковый запрос ничего не найдено.”
- 清空之前输入的内容,替换输入“Санкт-Петербург”
- 点击“Найти”按钮
- 校验页面共展示15条文章链接
- 将这些链接的文本输出到控制台
4. 日历功能测试
打开目标站点后执行以下操作:
- 在“Откуда”和“Куда”输入框中输入有效的地点名称
- 点击日历按钮,选择从当日开始往后5天的日期,若跨月需自动适配(例如9月29日执行测试则选择10月4日)
- 点击“Найти”按钮
- 按“Минск-Пассажирский — Брест-Центральный” – 19:25的格式将发车时间和列车名称输出到控制台
- 点击第一条结果链接
- 校验页面展示对应列车名称
- 校验“Дни курсирования”下方的文本不为空
- 点击站点logo返回首页
- 校验首页加载正常
二、现有已实现代码
public class Tests { private IWebDriver driver; private readonly By _inputField = By.XPath("//input[@name = 'q']"); private readonly By _searchButton = By.XPath("//input[@class = 'gNO89b']"); private readonly By _targetLink = By.XPath("//h3[@class = 'LC20lb DKV0Md']"); [SetUp] public void Setup() { driver = new OpenQA.Selenium.Chrome.ChromeDriver(); driver.Navigate().GoToUrl("https://google.com"); driver.Manage().Window.Maximize(); } [Test] public void Test1() { var inputField = driver.FindElement(_inputField); inputField.SendKeys("белорусская железная дорога"); var searchBtn = driver.FindElement(_searchButton); Thread.Sleep(1000); searchBtn.Click(); var targetUrl = driver.FindElement(_targetLink); targetUrl.Click(); Assert.Pass(); } }
三、优化与实现指导
现有代码优化点
- 新增测试后清理逻辑,避免浏览器进程残留,添加如下代码:
[TearDown] public void TearDown() { driver.Quit(); driver.Dispose(); }
- 替换
Thread.Sleep为Selenium自带的显式等待,既提升用例稳定性也缩短执行时间,示例代码如下:
// 等待元素可点击的通用写法 var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); var searchBtn = wait.Until(d => { var ele = d.FindElement(_searchButton); return ele.Displayed && ele.Enabled ? ele : null; }); searchBtn.Click();
- 调整元素定位逻辑,谷歌的动态class(比如
gNO89b、LC20lb DKV0Md)会定期更新,建议定位搜索结果时筛选href包含rw.by的元素,稳定性更高。
各模块实现要点
- 主页面功能测试
- 语言切换定位顶部语言切换按钮,点击后校验页面核心元素文本为英文即可
- News板块校验用
FindElements获取所有新闻条目,断言返回集合的长度>=4 - 顶部导航按钮、底部版权文本都可以通过元素
Text属性直接和目标值比对校验
- 搜索功能测试
- 随机20位字符串可以用C#的
Random类从字母数字池中随机抽取拼接,保证每次运行值不同 - 地址校验直接读取
driver.Url属性,和目标地址前缀比对即可 - 搜索结果链接用
FindElements定位所有符合规则的a标签,遍历输出Text属性到控制台
- 日历功能测试
- 5天后的日期直接用
DateTime.Now.AddDays(5)计算,自动适配跨月、跨年场景,不需要单独写逻辑 - 日历控件操作先点开弹窗,判断目标日期和当前日期是否同月,不同月先点击切换月份按钮,再选中对应日期即可
- 列车信息定位结果列表的车次名称、时间元素,按要求格式拼接后输出,后续详情页校验、返回首页操作都是常规的元素点击、文本校验逻辑,最后校验首页logo存在即可确认首页加载正常
基础学习优先级
- 先掌握Selenium三种等待方式:隐式等待、显式等待、流畅等待,这是稳定自动化用例的核心
- 掌握8种元素定位方法,优先用ID、Name、CssSelector,XPath作为兜底,不要用容易变化的class、相对位置定位
- 掌握常用元素操作方法:
SendKeys、Click、Clear、文本/属性读取 - 掌握你使用的单元测试框架(当前示例为NUnit)的断言写法、生命周期注解用法
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

