Selenium c#如何通过JavaScript查找元素?

Posted

技术标签:

【中文标题】Selenium c#如何通过JavaScript查找元素?【英文标题】:Selenium c# how to findElement by JavaScript? 【发布时间】:2016-11-25 09:16:43 【问题描述】:

我正在使用旧门户网站,我必须使用 IE。有些东西它没有找到,因为它是<td> 菜单的一部分,我试图通过XPath 找到它,但没有帮助。

我发现表单正在由 javascript 函数呈现。我想单击它们只是为了执行它,但是如何使用 selenium WebDriver 定位页面元素??

例如:如果我有这个代码

<div class="logout-link ng-scope" 
     ng-click="login(&quot;github&quot;)" 
     ng-show="!me" ng-controller="MenuCtrl">login</div>

如何使用 Selenium WebDriver 执行 ng-click 部分?

【问题讨论】:

I tried to find it by XPath, but doesn't help.是什么意思..有没有例外或者别的什么..也分享一下 好吧,因为我没有真正的网络代码。它在另一台电脑上,我无法提取任何代码,所以我决定举另一种例子。有一个工具栏,xpath 找到了每个工具,但我无法单击一个,因为所有工具都具有相同的属性,但 javascript。所以我需要具体执行一个javascript。这就是为什么。 我喜欢接受的答案与标题无关。 ***.com/questions/11688694/… 【参考方案1】:
    确保您尝试在其所在的同一框架中查找元素。答案示例:How to switch between frames in Selenium WebDriver using Java 尝试等待元素出现并可用:http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp 希望您知道如何通过 JS (document.getElementsByClassName('logout-link ng-scope')) 查找元素,这里是关于在 C# 中使用 JS 的热门答案:Execute JavaScript using Selenium WebDriver in C# - 唯一的区别是您不这样做不需要返回任何东西 - 你只需要'.click()'

【讨论】:

谢谢。它不适用于框架,因为网络没有任何框架。我实际上使用了等待,它工作得很好。这不是真正的代码,在真正的代码中没有任何可以识别的id或类名。【参考方案2】:

为什么要执行Javascript来定位一个元素???尝试使用WebDriverWait 等到元素可见且可点击,如下所示:-

var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));

var Login = wait.Until(ExpectedConditions.ElementToBeClickable(By.Xpath("//div[text() = 'login']")));
 Login.Click();

注意 :- 在尝试之前确保此元素不在任何 frame

希望对你有帮助.....:)

【讨论】:

你说得对,这确实对我有用,非常感谢! @NancyCruz 欢迎您。很高兴提供帮助..:)..我建议下次您提出问题时,至少提供一些您尝试过的足够信息以及结果如何,如果异常也会分享,这就是为什么有经验的人可以给出尽快为您提供正确的解决方案,而不会造成混淆...无论如何,学习愉快...:)【参考方案3】:

单击您创建的 Web 元素会执行相关功能。通过 CSS 选择器查看 ng-click:

IWebElement elem = driver.FindElement(By.CssSelector("div[ng-click=login(&quot;github&quot;)]"));
elem.click();

您还可以构建一个动作来移动到该元素,然后单击它:

IWebElement elem = driver.FindElement(By.CssSelector("div[ng-click=login(&quot;github&quot;)]"));
Actions action = new Actions(driver);
action.MoveToElement(elem).Click().Build().Perform();

【讨论】:

这个给我一个错误:“无效的选择器:指定了一个无效或非法的选择器\n”

以上是关于Selenium c#如何通过JavaScript查找元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中单击带有 selenium webdriver 的 javascript 确认对话框

Selenium + C#:ExecuteAsyncScript 不起作用

在 C# 中使用 Selenium WebDriver 执行 JavaScript

Selenium C# - 捕获 Javascript 错误

如何使用 C# 在 Selenium WebDriver (Selenium 2) 中最大化浏览器窗口?

Selenium WebDriver C#通过href路径查找元素