OpenQA.Selenium.NoSuchElementException:没有这样的元素:无法找到元素

问题描述 投票:0回答:3

我有一个网页,我正在尝试使用此练习网站使用硒实现自动化https://practicetestautomation.com/practice-test-login/,我的脚本中有等待条件,所以我不确定为什么会发生这种情况。 Selenium 无法找到链接并抛出此异常:

OpenQA.Selenium.NoSuchElementException:没有这样的元素:无法定位元素:{“method”:“link text”,“selector”:“Practice”} (会话信息:chrome=119.0.6045.106);有关此错误的文档,请访问:https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception

我正在尝试在页面上找到“练习”网址,这是该网址所在网页的代码:

<nav class="menu"><ul id="menu-primary-items" class="menu-primary-items"><li id="menu-item-43" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-43"><a href="https://practicetestautomation.com/">Home</a></li>
<li id="menu-item-20" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-20"><a href="https://practicetestautomation.com/practice/">Practice</a></li>
<li id="menu-item-21" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-21"><a href="https://practicetestautomation.com/courses/">Courses</a></li>
<li id="menu-item-19" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-19"><a href="https://practicetestautomation.com/blog/">Blog</a></li>
<li id="menu-item-18" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-18"><a href="https://practicetestautomation.com/contact/">Contact</a></li>
</ul></nav>

这是 Selenium 中的代码,表示我有问题:

IWebElement link = driver.FindElement(By.LinkText("Practice"));
String hrefAttr = link.GetAttribute("href");
c# selenium-webdriver selenium-chromedriver selenium-ide
3个回答
0
投票

当您无法使用一种定位器策略定位元素时(在您的情况下为

LinkText
),您可以随时尝试使用其他定位器策略(例如
XPATH
)。 尝试使用以下 XPath 表达式 -
//li[@id='menu-item-20']//a

更改您的代码如下:

IWebElement link = driver.FindElement(By.XPath("//li[@id='menu-item-20']//a"));
String hrefAttr = link.GetAttribute("href");

0
投票

如上所述,尝试将linkTest更改为xpath:

//a[text()='Practice']

你也可以隐式添加等待


0
投票

在这种情况下,您有动态的 li 类名,因此您应该使用 XPath 根据文本进行过滤,例如

string nameForFiltering = "Practice";
var element = driver.FindElement(By.XPath($"//nav[@class='menu']/ul/li/a[text()='{nameForFiltering }']"));
© www.soinside.com 2019 - 2024. All rights reserved.