不能 select 使用 C# 的 selenium Web 驱动程序基于其标签名称的元素

Cannot select an element based on its tag name using selenium web driver for C#

我正在使用 C# 的 Selenium Web 驱动程序,我使用的浏览器是 Google Chrome。当我尝试获取下面 HTML 代码片段中演示的元素的内部 html (文本)时,我得到 "no such element: Unable to locate element: { "方法":"css 选择器","选择器":"跨度"}" 错误。

<a class="profile-link" href="#">
    <span dir="ltr">
        <span aria-hidden="true">FirstName LastName</span>
        <span class="visually-hidden">xxxxxxxxxxx</span>
    </span>
</a>

我用来获取包含名字和姓氏的跨度的 C# 代码是:

string result = driver.FindElements(By.ClassName("profile-link")).Last().FindElement(By.TagName("span")).FindElement(By.TagName("span")).Text;

此外,当我尝试使用 FindElementsLast() 而不是 FindElement 获取名字和姓氏时,我得到 "Sequence contains no elements "

在这种情况下,我使用的代码是:

string result = driver.FindElements(By.ClassName("profile-link")).Last().FindElements(By.TagName("span")).Last().FindElements(By.TagName("span")).First().Text + ",";

如何解决此问题并获取包含 FirstName 和 LastName 的范围的内部 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;

或者,您可以使用 XPathcss。下面我尝试使用 XPath

//a[@class='profile-link']/descendant::span[2]

在代码中:

string result = driver.FindElement(By.XPath("//a[@class='profile-link']/descendant::span[2]")).Text;