我想知道是否可以将选择器文本添加到现有的By对象。
也就是说,假设我有一个名为“.popup”的弹出窗口。但是随着webapp的使用,我想要更具体一点。现在,我们的弹出窗口增加了一个类名“.cart”。我的新选择器想成为“.popup.cart”。这就是我所拥有的。有没有更好或更有效的方法来做到这一点? (我用C#编码,但它可以与任何语言相关。)
By selector= By.CssSelector("div.popup");
selector = By.CssSelector(
selector.ToString().Remove(0, selector.ToString().LastIndexOf(":") + 1)
+ ".cart");
上面发生了什么,选择器成为“div.popup”。 selector.ToString()返回“By.CssSelector:div.popup” 所以我删除了从开头到最后一个“:”的所有文本,并将剩余的文本添加到“.cart”。 选择器然后变成“div.popup.cart”,这就是我想要的。
当我尝试组合任何已经被“ByChained”的选择器时,问题就出现了。 ToString()方法将返回By.Chained([By.CssSelector: .popup, By.CssSelector: .title])
如果有帮助,我也是嘶嘶声。所以,如果有一种JQuery方法可以做到这一点,我就是开放的。
答案 0 :(得分:1)
将“div.popup”放在一个字符串中,如下所示:“str”: -
String str = div.popup
然后你可以将“.cart”附加到字符串中,使其成为“div.popup.cart”,然后使用 cssSelector :
By selector= By.cssSelector(str+".cart");
注意: - 上面是一个java代码。
答案 1 :(得分:-1)
如上所述,我基本上通过展开By.CssSelector()。ToString()输出和/或ByChained()。ToString()输出来解决这个问题。有一些警告。主要是ByChained()中的最后一个选择器必须是By.CssSelector类型(因为我正在添加一个JQuery伪类):
private static By AddPseudoFunction(By selector, string pseudoFunc)
{
string type = selector.GetType().ToString();
string selectorValue = selector.ToString();
if (type.Contains("Chained"))
{
selectorValue = selectorValue.Remove(0, selector.ToString().IndexOf("[") + 1);
int start = selectorValue.LastIndexOf("]");
int delta = selectorValue.Length - start;
selectorValue = selectorValue.Remove(start, delta);
}
StringBuilder builder = new StringBuilder();
foreach (string s in selectorValue.Split(','))
{
builder.Append(" ");
builder.Append(s.ToString().Remove(0, s.ToString().LastIndexOf(":") + 2));
}
selectorValue = builder.ToString().TrimStart(' ') + pseudoFunc;
return new ByJQuery.ByJQuerySelector(selectorValue, true);
}
当然,如果你想这样做它会返回一个By.CssSelector,只需用以下代码替换:
return By.CssSelector(selctorValue + addSelector);
其中addSelector是一个有效的CSS Selector值(就像我在问题中描述的那样)。