c# - 无法使用 C# 的 selenium Web 驱动程序根据标签名称选择元素
问题描述
我正在为 C# 使用 Selenium Web 驱动程序,而我正在使用的浏览器是 Google Chrome。当我尝试获取下面的 HTML 代码片段中演示的元素的内部 html(文本)时,我得到“没有这样的元素:无法找到元素:{“方法”:“css 选择器”,“选择器”: “跨度”}“错误。
<a class="profile-link" href="#">
<span dir="ltr">
<span aria-hidden="true">FirstName LastName</span>
<span class="visually-hidden">xxxxxxxxxxx</span>
</span>
</a>
我用来获取包含 FirsName 和 LastName 的跨度的 C# 代码是:
string result = driver.FindElements(By.ClassName("profile-link")).Last().FindElement(By.TagName("span")).FindElement(By.TagName("span")).Text;
此外,当我尝试使用FindElements
andLast()
而不是来获取 FirstName 和 LastName 时FindElement
,我得到“序列不包含元素”
在这种情况下,我使用的代码是:
string result = driver.FindElements(By.ClassName("profile-link")).Last().FindElements(By.TagName("span")).Last().FindElements(By.TagName("span")).First().Text + ",";
如何解决此问题并获取包含 FirstName 和 LastName 的 span 的内部 HTML?
解决方案
我猜您在访问该元素之前缺少等待/延迟。
尝试添加
WebDriver.WaitForElementIsVisible(By.Xpath("(//a[@class='profile-link')])[last()]"));
然后使用您的代码。
另外,我不确定您找到该元素的方式。
在我看来,CSS 选择器或 XPath 在这里更可靠。
所以,请试试这个:
WebDriver.WaitForElementIsVisible(By.Xpath("(//a[@class='profile-link')])[last()]"));
string result = driver.FindElement(By.Xpath("(//a[@class='profile-link')])[last()]/span/span")).Text;
推荐阅读
- c# - 在 mvc 中用网格视图绑定 2 个 sql 表(数据库优先)
- angular - 带有 keydown.space 和 keydown.tab 的角三元条件
- javascript - 从 URL 获取 React-Native JSON
- ios - 如何在 Swift4 中将 UITableView 标签更改为多种颜色
- javascript - 更改组件按钮单击时的 Vue 根实例数据值,然后更改另一个组件的 v-show/v-if
- python - pysal多边形对象不返回质心
- javascript - 刷新页面时npm http-server“找不到页面”
- python - 如何获取子文件夹中脚本的路径
- java - 多数据库对象的 Comment-Feature 设计
- sonarqube - 从 SonarQube 中的注释行中删除代码行数