【问题标题】:Ignore case Xpath @Name attribute c# Selenium/Appium忽略大小写 Xpath @Name 属性 c# Selenium/Appium
【发布时间】:2021-11-12 06:20:51
【问题描述】:

我有一个C# selenium/Appium 项目,我需要在其中找到一个桌面应用程序窗口By.Xpath("").

这行得通:

By.XPath("//*[@Name='ASDASD']");

但是,某些版本的应用程序的窗口名称为“ASDasd”,这会导致上面的Xpath 找不到窗口元素并且测试失败。

是否可以忽略@Name 属性的大小写,无论是"ASDASD", "ASDasd"还是其他?

我确实尝试过使用 XPath 翻译功能,但我找不到元素,我认为我做错了。

我尝试了什么:

By.XPath("//*[translate(name(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'asdasd']")

By.XPath("//*[translate(name(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'asdasd']")

By.XPath("//*[@Name='translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'asdasd'']")

By.XPath("//*[@Name='translate(asdasd,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')']")

也许还有其他一些变化,但我无法让它工作。

某些示例的格式可能无效。

虽然其他似乎有效但找不到该元素,它会超时。

更新: 感谢您的帮助,这很有效:

By.XPath("//*[translate(@Name, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')='asdasd']");

但是,它以某种方式为测试增加了 60 秒,它似乎在它寻找主窗口的地方之一停止了 60 秒。

感谢您的帮助!

问候

【问题讨论】:

    标签: selenium xpath appium ignore-case


    【解决方案1】:

    name() 为您提供上下文节点的名称。在这种情况下 (//*),您当前正在查看的任何元素的名称。你的意思是写@Name,即属性恰好被称为Name

    By.XPath("//*[translate(@Name, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'asdasd']")
    

    使用translate() 很笨拙,并且当搜索字符串包含意外字符时会失败。

    很遗憾,XPath 1.0 中没有lower-case() 函数。但是您可以借助宿主语言(例如 C#)来解决此限制。

    以下将动态创建一个 XPath 表达式,它以不区分大小写的方式查找任意值:

    var searchValue = "asdasd";
    var uc = searchValue.ToUpperInvariant();
    var lc = searchValue.ToLowerInvariant();
    
    var xpath = $"//*[translate(@Name, '{uc}', '{lc}') = '{lc}']";
    // -> "//*[translate(@Name, 'ASDASD', 'asdasd') = 'asdasd']"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多