Selenium webdriver returns string.Empty 部署到 TFS 时用于面包屑文本 (IwebElement)

Selenium webdriver returns string.Empty for breadcrumb text (IwebElement) when deployed onto TFS

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

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

主页 > 预订

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

现在,当我尝试 运行 在本地进行测试时,它工作正常,但是当我将代码签入 TFS 并构建它时,VS Test Runner 构建失败,因为它找不到来自 IwebElement 元素的文本或 returns 作为 String.Empty 的文本。现在,相同的测试,当 运行 在我的本地机器上时,工作得很好,给出了预期的测试结果和我的 Iwebelement(面包屑)的预期值。此外,上面面包屑的 HTML 结构正在后端呈现,我可以这么说,因为我试图看到 HTML 它使用 [=40= 处的 webdriver 的页面源 属性 呈现]时间并将其显示在我的异常消息中。

另外,我的后台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>  
-----------^

当我查看您的 HTML 时,该文本似乎与您的面包屑导航无关 object。您使用的查找将找到 <div>,但文本似乎附加到 div.
<a> child 您可以使用 Find 方法获取正确的 child,或者您可以尝试 div.

的 textContent 属性

你本地和TFS的区别运行大概可以用不同版本的IE来解释and/orOS.

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

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

这解决了我上面的错误。