【问题标题】:Find a button on a web page looking for part of its InnerText string in Visual Studio在 Visual Studio 中查找网页上的按钮以查找其 InnerText 字符串的一部分
【发布时间】:2014-07-28 11:26:38
【问题描述】:

我正在为一个网站编写自动化测试。在网站上有一个按钮,内部文本“全部打开”+四个随机数字。例如:“全部 Open2957”。有没有办法只使用字符串的“全部打开”部分来找到按钮?

这不起作用,因为字符串缺少最后四个数字:

HtmlSpan uIAllOpenPane = new HtmlSpan();
uIAllOpenPane.SearchProperties[HtmlDiv.PropertyNames.InnerText] = "All Open";

【问题讨论】:

    标签: visual-studio-2013 coded-ui-tests


    【解决方案1】:

    简单的答案是使用PropertyExpressionOperator.Contains 而不是PropertyExpressionOperator.EqualTo 比较器并仅搜索所需的文本。

    对于记录的测试,在 UI Map 编辑器中找到控件并查看其属性面板。单击“搜索属性”字段,然后单击省略号。出现的窗口允许更改比较器和所需的文本。

    对于手动编码测试,请使用以下形式的代码:

    uIAllOpenPane.SearchProperties.Add(HtmlDiv.PropertyNames.InnerText,
        "All Open",
        PropertyExpressionOperator.Contains);
    

    根据this Microsoft blog,问题中使用的数组索引样式(即[])在内部调用SearchProperties.Add(...),但该样式没有指定...Contains的变化,所以调用@ 987654329@ 明确。

    【讨论】:

    • 我尝试了您对录制测试和手动编码测试的编辑。测试似乎根本找不到按钮,即使这应该可以工作。
    • @hardyfelix 可能有一些其他搜索属性阻止了按钮被找到。 Coded UI 记录器在搜索中添加了很多搜索属性,如果有问题可以删除很多。当应用程序更改为在屏幕上显示更多项目或正在运行应用程序的多个副本时,它会添加许多项目以尝试确保找到正确的项目。检查其他搜索属性,看看是否应该删除。
    • 无论我搜索什么,我总是得到 Microsoft.VisualStudio.TestTools.UITest.Extension.FailedToPerformActionOnHiddenControlException: 你知道这个异常吗?我试图将搜索属性的数量限制在最低限度,但它仍然无法在该特定页面上找到单个按钮。
    • @hardyfelix 有很多网页寻求有关该异常的帮助和很多好的建议,但您最初的问题问的是其他问题。如果你真正的问题是关于那个例外,那么你应该在问题中说明它。
    • 是的,你是对的。我认为我的问题与我无法搜索字符串的一部分有关。但由于实际上在该特定页面上没有任何东西是可搜索的,所以我面临另一个问题。我将在别处寻找该异常的解决方案
    【解决方案2】:

    看看这个

     Button allOpenButton =  (Button)BrowserWindow.ExecuteScript("allOpenButton = function(){var found; $('input[type=\"button\"]').each(function(){ if($(this).val().indexOf('All Open') > -1){ found = $(this);};}); return found;}; return allOpenButton();");
    

    【讨论】:

      【解决方案3】:

      当我试图定位控制器时,我只得到了FailedToPerformActionOnHiddenC‌​ontrolException。最终,我能够找到包含我试图定位的控制器的 DIV 容器,而不是专注于直接查找控制器。找到容器后,我可以使用

      找到控制器
      HtmlSpan uIAllOpenPane = new HtmlSpan(container);
      uIAllOpenPane.SearchProperties.Add(HtmlDiv.PropertyNames.InnerText, "All Open",
      PropertyExpressionOperator.Contains);
      

      @AdrianHHH 的代码在每次遇到控制器时随机分配部分字符串时帮助解决了这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-14
        • 1970-01-01
        • 2018-02-14
        • 1970-01-01
        • 2021-11-15
        相关资源
        最近更新 更多