获取类名有空格的元素的 href link

Get the href link of an element with classname having spaces

我一直在尝试使用 class 名称获取元素的 link,但总是出现找不到元素的错误

List<IWebElement> LinkElements =  Selenium.Selenium.driver.FindElementsByClassName("column.wrap-text").ToList();

我以某种方式设法使用以下代码获得了我想要的 link,但我知道这不是一个好方法。

try
    {
            Selenium.Selenium.driver.Navigate().GoToUrl(txt_url.Text);

            List<IWebElement> LinkElements = Selenium.Selenium.driver.FindElementsByTagName("a").ToList();

            List<string> ValidLinks = new List<string>();

            foreach (IWebElement LinkElement in LinkElements)
            {
                string LinkString = LinkElement.GetAttribute("href");
                if (LinkString != null)
                {
                    if (LinkString.Contains("documents"))
                    {
                        list.Items.Add(LinkString);
                    }
                }
            }
        }
        catch (Exception)
        { }

下面是我要提取 href link("/view/garnimii@/Testing%20Folder/MyFile.txt") 的元素的 html 代码其中的标题名称。我已经尝试了所有可能的方法,但无法读取带有 findbyclassname 或 findbyxpath(此处非常模糊)的元素。谁能帮我解决这个问题?

 <div class="wrapper fluid-element">
 <div class="wrapper fluid-element">
 <div class="wrapper fluid-element">
 <div class="column wrap-text">
 <a title="MyFile.txt"  href="https://drive.corp.amazon.com/documents/garnimii@/Testing%20Folder/MyFile.txt">MyFile.txt</a 
>
</div>
</div>
<div class="column actions resource-actions-view">
<a data-turbolink="true" href="/view/garnimii@/Testing%20Folder/MyFile.txt"><i class="fa fa- 
external-link"></i> View
</a></div>
<div class="column actions resource-actions-share">
<a data-target="#resource-modal-share" data-toggle="modal" 
href="/share/garnimii@/Testing%20Folder/MyFile.txt">
<i class="fa fa-share-alt"></i> Share
</a>
</div>
<div class="column actions resource-actions-rename resource-header-actions">
<a data-resource-basename="MyFile.txt" data-resource-id="8a520062-5dbe-46ba-b4b0-b672f6481c17"         
 data-root-path="/" data-target="#resource-modal-rename" data-toggle="modal" href="#resource- 
 modal-rename">
 <i class="fa fa-pencil"></i> Rename
 </a>
 </div>
 </div>
 </div>

更新

   foreach (IWebElement LinkElement in LinkElements)
   { 
       string LinkString = LinkElement.GetAttribute("title");  
       if (LinkString != null) 
       { 
         if(LinkString.Contains("myfile.txt"))
         {  
            list.Items.Add(LinkString.GetAttribute('href'));
         }
       }
    }

FindElementsByClassName 可以通过单个 class 名称定位元素。
对于多个 class 名称,您应该使用 XPath 或 CSS 选择器。
所以而不是

List<IWebElement> LinkElements =  Selenium.Selenium.driver.FindElementsByClassName("column.wrap-text").ToList();

尝试使用

List<IWebElement> LinkElements =  Selenium.Selenium.driver.FindElementsByCssSelector("div.column.wrap-text").ToList();

您甚至可以尝试使用 //a xpath。

List<IWebElement> LinkElements = Selenium.Selenium.driver.FindElementsByXpath("//a");

List<string> ValidLinks = new List<string>();

foreach (IWebElement LinkElement in LinkElements){
        Console.WriteLine(LinkElement.GetAttribute('href'))
}

首先打印所有 GetAttributehref。如果您的输出包含所有 href,那么我们可以继续添加到其他列表中。

更新:

string LinkString = Selenium.Selenium.driver.FindElementByXpath("//a[@title='MyFile.txt']").GetAttribute('href')