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("github")"
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("github")]"));
elem.click();
您还可以构建一个动作来移动到该元素,然后单击它:
IWebElement elem = driver.FindElement(By.CssSelector("div[ng-click=login("github")]"));
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 错误