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

时间:2016-07-21 16:48:04

标签: javascript c# selenium selenium-webdriver

我正在使用旧门户网站,我必须使用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部分?

3 个答案:

答案 0 :(得分:0)

  1. 确保您尝试在其所在的相同框架中查找元素。答案示例:How to switch between frames in Selenium WebDriver using Java
  2. 尝试等待元素显示并可用:http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp
  3. 希望你知道如何通过JS找到元素(document.getElementsByClassName('logout-link ng-scope')),这里有热门回答在C#中使用JS:Execute JavaScript using Selenium WebDriver in C# - 唯一不同的是你不需要返回任何东西 - 你只需要'.click()'

答案 1 :(得分:0)

单击您创建的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();

答案 2 :(得分:0)

为什么要执行Javascript来查找元素???尝试使用WebDriverWait等待元素可见并可点击,如下所示: -

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

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

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

之内

希望它有帮助.....:)