C# 在Selenium.NET核心项目中使用XPath选择属性时出现问题

C# 在Selenium.NET核心项目中使用XPath选择属性时出现问题,c#,selenium,asp.net-core,xpath,C#,Selenium,Asp.net Core,Xpath,我有一个奇怪的问题,我似乎无法在这个论坛(或互联网上的其他地方)找到解决办法 我正在使用Selenium和.NETCore3.1构建一个测试自动化应用程序。我正在尝试使用OpenQA.Selenium.IWebDriver和之前选择的OpenQA.Selenium.IWebElement以及Xpath选择器在DOM中选择一个元素,如下所示: IWebElement parent => driver.FindElement(By.CssSelector("#parent"

我有一个奇怪的问题,我似乎无法在这个论坛(或互联网上的其他地方)找到解决办法

我正在使用Selenium和.NETCore3.1构建一个测试自动化应用程序。我正在尝试使用
OpenQA.Selenium.IWebDriver
和之前选择的
OpenQA.Selenium.IWebElement
以及Xpath选择器在DOM中选择一个元素,如下所示:

IWebElement parent => driver.FindElement(By.CssSelector("#parent"));
IWebElement child(string t) = parent.FindElement(By.XPath($".//li[@data-original-title=\"{t}\"]"))
...
var el = child("'title-1'");
其中,DOM如下所示:

<div id="parent">
  ... <!-- child element is nested multiple levels -->
  <li title data-original-title="'title-1'"></li>
  <li title data-original-title="'title-2'"></li>
  ...
</div> 
然而,当我复制这个显然不存在的xpath并使用chrome调试器搜索dom时,它确实匹配元素

然后我试图找出可能的原因,可能是我与父母或smth犯了错误。因此,我尝试使用以下XPath作为子选择器,匹配另一个属性(不带out值)

这将返回一个元素,在检查调试器之后,它是我想要的子元素。现在我假设字符串的格式一定出了问题,所以我尝试以下选择器(不带值)

这会产生(大致)与之前相同的错误:

OpenQA.Selenium.NoSuchElementException:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“//li[@data original title]” (会话信息:chrome=85.0.4183.102)

当我使用上述xpath
//li[@data original title]
在chrome调试器中使用搜索函数尝试在DOM中查找元素时,它与我期望的子元素匹配

所以我现在认为连字符一定是问题的根源。我尝试了一些关于这个问题的研究,但我能找到的唯一真实的东西是

在这里,他们建议改用CSS选择器,我试过了,但也没有成功,而且我相信relative to parent函数不适用于CSS选择器

在这篇文章中,有人指出问题最终是由DOM结构引起的,这对我没有多大帮助,也让我觉得我只是在一直忽略的某个方面犯了一个大错误

结论 基于上述XPath选择器,是否有任何错误导致不匹配,或者chrome调试器中XPath的实现与.NET Core Selenium库中XPath的实现是否存在差异,我应该知道这可能导致此问题


提前感谢并为这篇冗长的帖子感到抱歉:$

,结果是我忽略了这一点。“数据原始平铺”属性根据用户鼠标输入(用于有条件地显示工具提示)进行反应式设置,并清除“标题”属性。由于selenium只触发一个单击事件,并且在没有明确说明的情况下不会实际悬停在元素上方,因此在自动化过程中不会交换属性

结论
我应该更彻底地检查源HTML,以便在用户交互时更新DOM。

您确定问题中的HTML吗?例如,
data original title=“'title-1'”
通常是
data original title=“title-1”
。是的,我确定。该属性用于填充悬停时显示的工具提示。在这个工具提示中,title字段被封装在单引号中,如so
'title-1'
。此外,在我的问题中,通过测试错误输出中显示的生成XPath,已经证明了HTML的有效性。在chrome调试器的搜索字段中插入此项后,它将返回请求的元素。
OpenQA.Selenium.NoSuchElementException : no such element: Unable to locate element: {"method":"xpath","selector":".//li[@data-original-title="'title-1'"]"}
(Session info: chrome=85.0.4183.102)
IWebElement child(string t) = parent.FindElement(By.XPath($".//li[@title]"))
IWebElement child(string t) = parent.FindElement(By.XPath($".//li[@data-original-title]"))