-3

这是我在 StackOverflow 上的第一篇文章,我希望我能够详细地提供整个问题。如果我需要提供任何其他信息,请告诉我。问题描述:我正在使用常规的面包屑导航,显示从一页到另一页的导航顺序。面包屑具有 html 格式的 id = “divbreadcrumb”。

例如:如果我从主页(Home)导航到预订页面(Bookings),那么导航如下:

首页 > 预订

我希望自动化我对面包屑的测试,并检查页面上显示的面包屑文本与它应该是的实际面包屑文本。我试图通过使用 selenium Webdriver 以及 ATDD 工具来实现这一点,即 Specflow/SpecRun 和 Nunit,使用下面提到的代码。

现在,当我尝试在本地运行测试时,它工作正常,但是当我将代码签入 TFS 并构建它时,VS Test Runner 构建失败,因为它无法从 IwebElement 元素中找到文本,或者它返回文本为 String.Empty。现在,当在我的本地机器上运行相同的测试时,可以很好地给出预期的测试结果和我的 Iwebelement 的预期值(用于面包屑)。此外,上面的面包屑的 HTML 结构正在后端呈现,我可以这么说是因为我试图查看它在运行时使用 webdriver 的 pagesource 属性呈现的 HTML,并将其显示在我的异常消息中。

此外,我的后端 HTML 代码显示为:

       <div class="breadcrumb" >
               <div class="breadcrumb-content" >
        <div class="breadcrumb" id="divBreadcrumb" >                        
        <a onclick="some code written here" href="xyz.com">Home</a>
        &nbsp;&nbsp;&gt;&nbsp;&nbsp;<a href="LMN.com">Bookings </a>                      
</div>               
     </div>   
    </div>

PFB 我在自动化脚本中用于检查来自页面上的面包屑的文本的代码:

public void TestingBreadcrumb(int p0)
{
InternetExplorerOptions IEOptions = new InternetExplorerOptions();
IEOptions.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
IEOptions.IgnoreZoomLevel = true;
IEOptions.UnexpectedAlertBehavior = InternetExplorerUnexpectedAlertBehavior.Ignore;

IWebDriver iEDriver = new InternetExplorerDriver(IEOptions);
iEDriver.Manage().Window.Maximize();
iEDriver.Navigate().GoToUrl("http://example.com");
var breadcrumb = iEDriver.FindElement(By.Id("divBreadcrumb")).Text.ToString();
Assert.AreEqual("Home  >  Bookings ", breadcrumb);
}

我得到的错误是

[ERROR]   Expected string length 18 but was 0. Strings differ at index 0.  Expected: "Home  > Bookings " 
But was:  <string.Empty>  
-----------^
4

2 回答 2

0

这是我在 Stachoverflow 上发布的第一个问题,我很高兴我能找到在部署到 TFS 时出现错误的原因。这是因为当应用程序在 TFS 服务器上运行时,即使在后端生成了 HTML 但没有显示出来(可能是因为 TFS 以低分辨率运行应用程序,这有点难以解决)并且应用程序响应隐藏面包屑。

因此,即使正在呈现 html,selenium 工具也只能找到该元素,但它的值将是空文本,直到该元素在前端可见。我们需要检查元素是否可见,然后尝试显示元素以获取其值。

这解决了我上面的错误。

于 2016-04-11T08:15:28.447 回答
0

当我查看您的 HTML 时,似乎文本与您的面包屑对象无关。您使用的 find 会找到,<div>但文本似乎附加到<a>该 div 的子级。
您可以使用 Find 方法来获取正确的子项,也可以尝试使用 div 的 textContent 属性。

本地和 TFS 运行之间的差异可能可以通过不同版本的 IE 和/或操作系统来解释。

于 2016-04-01T11:24:14.403 回答