首页 > 解决方案 > 无法使用 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;

此外,当我尝试使用FindElementsandLast()而不是来获取 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?

标签: c#htmlseleniumselenium-webdriverselenium-chromedriver

解决方案


我猜您在访问该元素之前缺少等待/延迟。
尝试添加

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;

推荐阅读