带有ID属性的Selenium C#搜索结果为CsSelector



所以,我有了我想进入的div:

<div id="FromTitle" [something,something]>

我的代码看起来是这样的:

var searchID = "FromTitle";
//some other code that's finding elements perfectly fine
driver.FindElement(By.Id(searchID));

但VSC抛出了一个例外:

Unhandled exception. OpenQA.Selenium.NoSuchElementExeption: no such element: Unable to locate element: {"method":"css selector","selector":"#FromTitle"}

为什么C#/Selenium查找CSS而不查找ID?

我已经尝试过将var中的值粘贴到(By.Id("FromTitle"))中,并得到了和上面相同的异常。我已经浏览了CSS文件,显然并没有#FromTitle。对于之前所有的find元素,它都可以正常工作。即使有些不对劲,我也会得到异常"method":"id"。但不是为了那个。

它通过Id、以及CSS选择器来查找元素

选择器#FromTitle是CSS选择器,用于通过Id来识别元素。

您需要对元素使用显式等待,或者切换到元素所在的帧。你的问题中没有足够的信息给你比这更具体的信息。

禁止LinkTextPartialLinkTextXPathSelenium在内部将所有其他定位器策略转换为等效的CssSelector

因此,在错误堆栈中,您会发现CssSelector而不是Id

更改是通过相应的客户端特定绑定传播的。对于Selenium Java客户端,以下是源代码片段:

case FIND_CHILD_ELEMENT:
case FIND_CHILD_ELEMENTS:
case FIND_ELEMENT:
case FIND_ELEMENTS:
String using = (String) parameters.get("using");
String value = (String) parameters.get("value");
Map<String, Object> toReturn = new HashMap<>(parameters);
switch (using) {
case "class name":
toReturn.put("using", "css selector");
toReturn.put("value", "." + cssEscape(value));
break;
case "id":
toReturn.put("using", "css selector");
toReturn.put("value", "#" + cssEscape(value));
break;
case "link text":
// Do nothing
break;
case "name":
toReturn.put("using", "css selector");
toReturn.put("value", "*[name='" + value + "']");
break;
case "partial link text":
// Do nothing
break;
case "tag name":
toReturn.put("using", "css selector");
toReturn.put("value", cssEscape(value));
break;
case "xpath":
// Do nothing
break;
}
return toReturn;

最新更新