【问题标题】:How to select NOT element with specific string in colon attributed name如何在冒号属性名称中选择具有特定字符串的 NOT 元素
【发布时间】:2018-10-17 09:52:20
【问题描述】:

我有几个这样的元素:

<g transform="matrix">
   <image xlink:href="data:image/png" width="48">
</g>
<g transform="matrix">
   <image xlink:href="specyfic" width="48">
</g>
<g transform="matrix">
   <image xlink:href="specyfic" width="48">
</g>

我想选择名称中没有“specifyc”的元素。问题是有时有几个非元素,有时没有。非特定图像计数始终为 1。

由于属性名称中的“:”,我无法做到这一点。

我试过了:

  public static getEventIconOnMap: ElementFinder = 
   element.all(by.css('image[width="48"]:not(image[xlink\\:href*="specyfic"'))).last();

【问题讨论】:

  • 最好给出示例HTML,这样我们可以在本地尝试
  • 因此,您要选择其中不包含作品“specyfic”的所有图像。这是正确的吗?
  • 我无法为您提供完整的答案,但看看到目前为止的答案,我认为您错过了问题的关键部分。您的标记是 svg,可能嵌入在 HTML 页面中。这意味着标记是外来内容并且适用 XML 命名空间。所以在 CSS 中,这意味着使用管道字符而不是反斜杠冒号。由于声明命名空间前缀绑定看起来很难(可能是不可能的),我会尝试对所有前缀属性使用 *。所以你可以试试image[width="48"]:not([*|href*='specyfic'])

标签: html css typescript webdriver protractor


【解决方案1】:

您的代码对我来说没有多大意义,也不知道如何测试它,但我认为以下代码可以工作。尝试像这样转义字符:

public static getEventIconOnMap: ElementFinder = 
   element.all(by.css('image:not([xlink\:href*=specyfic]')).last();

这是一个有效的 CSS 选择器,因此请根据您的代码进行调整:

image:not([xlink\:href*=specyfic]) {
  // your code
}

这是一个有效的小提琴 - 它不是您使用的确切代码,但我将其编写为 css 选择器:https://jsfiddle.net/x4gsr658/

【讨论】:

  • css 替代方案不错,但请注意使用的选择器[attribute*=[attribute~= 不同。例如,specyficcccc 将作为匹配返回,因为 * 选择器只查找一个值,而 ~ 查找一个单词
  • 我知道区别,但 OP 说“名称中没有 'specyfic'”,所以它可以放在属性中的任何位置。
【解决方案2】:

我不知道你的问题是否正是这个问题,或者只是在写你的答案时输入错误,但我注意到这里有问题:

public static getEventIconOnMap: ElementFinder = 
   element.all(by.css('image[width="48"]:not(image[xlink\\:href*="specyfic"'))).last();

您错误地超出了: 字符,并且您没有在字符串内关闭选择器,而是在引号之外关闭了太多表达式,您需要将其重写为:

public static getEventIconOnMap: ElementFinder = 
   element.all(by.css('image[width="48"]:not(image[xlink\:href*="specyfic"])')).last();

此外,您不能在 :not() 伪中组合多个选择器:您编写了 :not(image[xlink\:href*="specyfic"]),但浏览器将无法解析它,这是语法错误!
考虑到选择器已经将选择限制为仅在第一部分 (image[width="48"]) 中的 &lt;image&gt; 元素,您的否定不需要确保标签名称。因此,请将您的选择器更正为以下内容:

image[width="48"]:not([xlink\:href*="specyfic"])

以下是更正后的完整代码:

public static getEventIconOnMap: ElementFinder = 
   element.all(by.css('image[width="48"]:not([xlink\:href*="specyfic"])')).last();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 2016-03-30
    • 2019-09-29
    • 1970-01-01
    • 2012-09-30
    • 2022-11-23
    相关资源
    最近更新 更多