我正在尝试检索Selenium中的超链接元素,其中的链接实际上正在执行javascript。尽管尝试了几种不同的方法,但仍无法检索到它。
<<注意:我能够检索其他控件-只是为此而苦苦挣扎>>元素如下所示;尝试检索一个test1_decode:
<section id="specialsection" role="tabpanel" aria-hidden="true">
<ul class="col4">
<li class="header2"><a href="javascript:SetApplication('test1_decode');">Example Application</a></li>
<li class="header2"><a href="javascript:SetApplication('test2_decode');">Example Application POC</a></li>
</ul>
</section>
我尝试了以下操作:使用XPath的FindElement包含链接文本,使用Xpath的FindElement包含文本,通过PartialLinkText查找的FindElement,通过LinkText查找的FindElement-全部失败。
我什至尝试将所有放在列表中;我想知道是否是因为它的高度为0?
//These are the different things I've tried:
IWebElement ExAppLogin = driver.FindElement(By.XPath("//a[contains(text(), 'Example Application')]"));
IWebElement ExAppLogin = driver.FindElement(By.XPath("//a[contains(@href, 'test1_decode')]"));
IWebElement ExAppLogin = driver.FindElement(By.PartialLinkText("test1_decode"));
IWebElement ExAppLogin = driver.FindElement(By.LinkText("test1_decode"));
IWebElement ExAppLogin = driver.FindElement(By.PartialLinkText("test1_decode"));
它们都生成一个异常“无法使用xpath ==“ ...
查找元素答案 0 :(得分:1)
可能的解决方案
因此,曾经/曾经 iframe-感谢所有评论/回复的人。
在调试处查看每个这些断点:
driver.FindElements(By.CssSelector("iframe"));
driver.FindElements(By.TagName("iframe"));
driver.WindowHandles;
我确定有iframe。由于这是一个POC,因此我只是硬编码以检索所需的iframe:
driver.SwitchTo().Frame(2);
我可以超越这一点。奇怪的是,即使我能够找到想要的元素:
IWebElement ExAppLogin = driver.FindElement(By.XPath("//a[contains(@href, 'test1_decode')]"));
(即我可以在调试中查看ExAppLogin变量的详细信息,因为它不是NULL /也不例外) 但是如果我这样做:
ExAppLogin.Click();
什么都没发生!
暂时,我可以继续执行javascript:
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
js.ExecuteScript("SetApplication('test1_decode');");
执行此操作后,我会遇到另一个问题,但是出于这个特定问题的目的,我想我可以考虑解决此问题-谢谢大家!
答案 1 :(得分:0)
您可以尝试以下CSS
driver.findElement(By.cssSelector("a[href*='test1_decode']"));
*=
将匹配href属性中的字符串。
答案 2 :(得分:0)
尝试使用XPath。如果此操作不起作用,请检查是否有iframe
可用。如果是,那么您必须先Swith_to iframe才能访问元素。
WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//a[contains(text(),'Example Application')][contains(@href,'test1_decode')]"))).click();;