我有一个奇怪的问题,我似乎无法在该论坛(或互联网上的其他地方)找到解决方案
我正在使用Selenium和.NET Core 3.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>
当我尝试执行此操作时,出现以下错误:
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)
但是,当我复制这个显然不存在的xpath并使用chrome调试器搜索dom时,它确实与该元素匹配。
然后我试图找出可能的原因,也许是我的父母或孩子犯了一个错误。因此,我尝试使用以下XPath作为子选择器,以匹配其他属性(无值)
IWebElement child(string t) = parent.FindElement(By.XPath($".//li[@title]"))
此做返回一个元素,并在检查调试器后将其是我想要的子元素。现在,我假设字符串的格式必须出问题,所以我尝试以下选择器(无值)
IWebElement child(string t) = parent.FindElement(By.XPath($".//li[@data-original-title]"))
这会(大致)产生与以前相同的错误:
OpenQA.Selenium.NoSuchElementException:没有这样的元素:无法找到元素:{“ method”:“ xpath”,“ selector”:“ .// li [@ data-original-title]”} (会话信息:chrome = 85.0.4183.102)
再次再次,当我尝试使用上述xpath .//li[@data-original-title]
在chrome调试器中使用搜索功能在DOM中查找元素时,与匹配预期的子元素。
所以我现在认为连字符必须引起问题。我对此问题进行了一些研究,但我唯一能找到的是this stackoverflow article
在这里,他们建议改用CSS选择器,我尝试过也没有用,而且我认为相对于父函数的CSS选择器不起作用。
在本文的发帖人comments中,问题最终是由DOM结构引起的,这对我没有多大帮助,也使我认为我只是犯了一个大错误,一直在俯视。
基于上述XPath选择器,我做错了什么导致我的不匹配,或者我应该知道,chrome调试器与.NET Core Selenium库在XPath的实现方面可能存在差异,可能会导致此问题问题?
在此先感谢并感谢您发表冗长的帖子:$
答案 0 :(得分:0)
事实证明,这是我忽略的事情。 data-original-tile属性是基于用户鼠标输入(用于有条件地显示工具提示)而被动地设置的,并且title属性已清除。由于硒仅会触发click事件,并且在没有明确说明的情况下实际上不会悬停在元素上方,因此在自动化过程中不会交换属性。
我应该更彻底地检查源HTML,以获取有关用户交互的DOM更新。