2014-10-19 32 views
0

我一直在硒和关闭了很长一段时间的麻烦现在。所以,我想我会创建一个很好的简单的例子,并希望硒专家可以告诉我:Selenium SendKeys到JqueryUi Popup

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

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

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. v.2.43.1使用Chrome
  2. ChromeDriver

回答

1

您的对话框在iframe打开的v.2.43的最新版本。在与登录表单元素进行交互之前,您需要切换到该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"); 

这将是超级convenie nt如果你可以给你的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()开关,并且您很好。

祝你好运!

+0

你是对的。一个id会很棒。该网站不是我的编码。我也不会使用iframe。但是你的代码是好的(翻译成C#)! – onefootswill 2014-10-19 08:50:42

+0

很高兴我能帮助你! – bcar 2014-10-19 13:20:22

相关问题