Selenium SendKeys到JqueryUi Popup

时间:2014-10-19 00:06:49

标签: selenium selenium-webdriver

我已经在Selenium上乱了很长时间了。所以,我想我会创建一个很好的简单例子,希望硒专家可以告诉我:

  • 我做错了什么;或
  • 我开车的网站出了什么问题。

在本练习中,我创建了一个简单的控制台应用程序,以便登录图书馆网站。显然,用户名和密码不正确。但事实是,我在下面提供的代码甚至无法在页面上可见的文本框中键入字符:

    static void Main(string[] args)
    {
        ChromeDriverService chromeDriverService = ChromeDriverService.CreateDefaultService(@"E:\");
        var chromeOptions = new ChromeOptions();

        chromeDriverService.Port = 7788;

        var driver = new ChromeDriver(chromeDriverService, chromeOptions);

        var nav = driver.Navigate();
        nav.GoToUrl("http://sapln.ent.sirsidynix.net.au/client/charlessturt/");

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

        wait.Until(ExpectedConditions.ElementExists(By.CssSelector("#libInfoContainer > div.loginLink > a"))).Click();

        wait.Until(ExpectedConditions.ElementExists(By.Id("j_username"))).SendKeys("gfhjdskaf");

        wait.Until(ExpectedConditions.ElementExists(By.Id("j_password"))).SendKeys("gfhdsjffd");

        driver.FindElementById("submit_0").Click();

        Console.ReadKey();
    }

一定要尝试填充该文本框。我很想知道你是如何实现它的。 我正在使用:

  1. 使用最新版Chrome的Selenium v​​.2.43.1
  2. v.2.43 ChromeDriver

1 个答案:

答案 0 :(得分:1)

您的对话框在iframe中打开。在您与登录表单元素进行交互之前,您需要切换到该iframe。

我没有测试您的代码,但您可以按照以下示例删除我的评论:

static void Main(string[] args)
{
    ChromeDriverService chromeDriverService = ChromeDriverService.CreateDefaultService(@"E:\");
    var chromeOptions = new ChromeOptions();

    chromeDriverService.Port = 7788;

    var driver = new ChromeDriver(chromeDriverService, chromeOptions);

    var nav = driver.Navigate();
    nav.GoToUrl("http://sapln.ent.sirsidynix.net.au/client/charlessturt/");

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

    wait.Until(ExpectedConditions.ElementExists(By.CssSelector("#libInfoContainer > div.loginLink > a"))).Click();

假设您的iframe是第一个发现的,您可以使用类似......的内容:

driver.switchTo().frame(driver.findElements(By.tagName("iframe").get(0)));  

由于您的iframe没有ID,我们无法做到:

driver.switchTo().frame("id of frame");

如果你能给你的iframe一个id,那将非常方便。

现在让我们继续您的代码:

    wait.Until(ExpectedConditions.ElementExists(By.Id("j_username"))).SendKeys("gfhjdskaf");

    wait.Until(ExpectedConditions.ElementExists(By.Id("j_password"))).SendKeys("gfhdsjffd");

    driver.FindElementById("submit_0").Click();

您登录后,需要切换回默认内容

    driver.switchTo().defaultContent(); 

    Console.ReadKey();
}

在尝试与对话框交互之前,只需注入iframe开关,然后在尝试使用初始页面执行任何其他操作之前在最后注入defaultContent()开关,并且您很好。

祝你好运!