如何选择带有类名的锚

时间:2016-09-02 10:27:32

标签: html css selenium

我正在尝试自动化测试我的网页。在网页上,我需要选择一个带有类名和文本的锚。锚被包含在div元素中。



<div class="margins0300">
<a tabindex="-32768" class="buttonLinkText">Hilfe</a>
</div>
&#13;
&#13;
&#13;

我正在尝试使用<a> Internet Explorer驱动程序访问Selenium但无法访问driver.FindElement(By.XPath("//a[contains(@class,'buttonLinkText') and .//text()='Hilfe']")); 。这是我的代码:

{{1}}

但是当我执行它时,没有找到任何元素。

如果有人可以帮助我,我真的很感激吗?

2 个答案:

答案 0 :(得分:1)

实际上,当您尝试使用xpath查找错误的元素时,您将语法作为By.CssSelector()传递。您应该尝试使用By.Xpath(),如下所示: -

driver.FindElement(By.Xpath("//a[@class = 'buttonLinkText' and text() = 'Hilfe']"));

您也可以使用By.LinkText()找到此元素,如下所示: -

driver.FindElement(By.LinkText("Hilfe"));

已修改: - 如果您仍然无法找到此元素,请尝试使用WebDriverWait等待元素存在,如下所示: -

IWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(3))
IWebElement element = wait.Until(ExpectedConditions.ElementExists(By.Xpath("//a[@class = 'buttonLinkText' and text() = 'Hilfe']")));

注意: - 确保此元素不在任何frame/iframe内。如果是,则需要在找到元素之前切换frame/iframe: -

driver.SwitchTo().Frame("frame/iframe name or id");

//Now find the element using above code

//After doing all stuff inside frame/iframe you need to switch back to default content 
driver.SwitchTo().DefaultContent(); 

答案 1 :(得分:0)

这就是我找到答案的原因,因为div元素被包含在一个框架中,并根据@saurabhgaur的输入:

driver.Navigate().GoToUrl("https://websunp8.bk.datev.de/zws/ShowMenu.do");
            driver.SwitchTo().Frame("content");

  driver.FindElement(By.XPath("//a[@class = 'buttonLinkText'  and text() = 'Hilfe']")).Click();