使用带有 IE 8 的 WebDriver .Net 时刷新页面元素的好方法是什么?

软件测试 自动化测试 硒2 网络驱动程序
2022-02-07 14:16:44

我正在使用 WebDriver Selenium 2 自动化我们拥有的用户配置文件 UI 的一部分,我在 Visual Studio 中编码,所以我使用 .Net 版本,因为我在 C# 中更舒服,我正在使用 IE8 进行测试。我遇到的部分问题是用户配置文件页面使用选项卡来主动显示用户地址信息或用户兴趣 - 浏览页面时发生的流程是用户地址信息出现在选择保存更改按钮之后然后激活用户兴趣选项卡。我想在用户地址信息中做一个小的更改,进入用户兴趣,然后通过选择用户兴趣页面上的按钮来保存所有更改。由于它是一页,只有活动选项卡会更改显示的信息,

基本上页面设置为 Tab1 - 用户地址,Tab2 - 用户兴趣。一次只主动显示一个。

有没有办法刷新元素?当页面更新以引入页面元素时,我已经在执行 FindElements,我认为这会刷新 DOM,但似乎没有发生。最初我认为这是一个 JQuery 问题,因为“兴趣”页面包含三个已填充的分类下拉列表,但我最终将其隔离为无法选择的按钮,即使 FindElements 似乎返回了一些东西。当我在按钮上使用 Sendkeys 时,我通常会得到一个 Element is no longer valid 错误。

我相信如果我能够刷新 DOM,那么它就会消失。

我正在使用的代码是:

        while (!((IJavaScriptExecutor)driver).ExecuteScript("return jQuery.active;").ToString().Equals("0"));
        Assert.True(driver.PageSource.Contains("Topics of Interest"));
        wait.Until(webDriver => driver.FindElement(By.Id("ctl00_PlaceHolderMain_SavePersonalizationButton")));
        IWebElement saveButton2 = driver.FindElement(By.Id("ctl00_PlaceHolderMain_SavePersonalizationButton"));
        wait.Until(webDriver => saveButton2.Displayed);
        Assert.IsTrue(saveButton2.Displayed);
        saveButton2.SendKeys(Keys.Enter);

while 是我的 JQuery 检查,以确保页面上没有运行任何内容。然后我添加了 Assert 以确保出现 User Interests 标题,以便我可以确定它已显示(尽管无论文本通过哪个选项卡显示,文本都在源上)。等待是为了确保元素出现在页面上,但不确定我是否需要这个。编辑:所以我的问题归结为能够检测到变化:

<div class="RoundedBox Tab inactive" onclick="toggleActiveTab (this, 'ctl00_PlaceHolderMain_PersonalizationTab')">

<div class="RoundedBox Tab" onclick="toggleActiveTab(this, 'ctl00_PlaceHolderMain_PersonalizationTab')">

然后我相信这会得到解决。

1个回答

我最终做的是在页面本身中寻找 html 源代码更改,没有 ID 或名称可链接并将其作为对象拉入以检测更改 - 除非我不知道可能会这样做的东西。如果是这样,请告诉我,如果可以的话,我想提高我的编码技能。

我最终做的只是查找页面源以了解在第二个选项卡上更新的页面何时处于活动状态:

wait.Until(webDriver => (driver.PageSource.Contains("class=\"RoundedBox Tab\" onclick=\"toggleActiveTab(this, 'ctl00_PlaceHolderMain_PersonalizationTab')")));

一旦我这样做了,脚本就会按照我的意愿进行。