2012-06-08 46 views
0

我使用Selenium Web驱动程序进行测试,但无法过去登录页面。我正在使用的代码:Selenium Web驱动程序 - 登录事件未启动

driver.Navigate().GoToUrl(baseURL + "URL"); 
driver.FindElement(By.Id("loginForm:username")).SendKeys("uName"); 
driver.FindElement(By.Id("loginForm:password")).SendKeys("pass"); 
driver.FindElement(By.Id("loginForm:login")).Click(); 

元素定位器是正确的,并登录点击正在发生的事情,但在那之后,我没有登录,但网页是卡在那里 - 没有错误或东西。相同的代码在IDE中工作。

我使用IE9也有更改的设置:

var options = new InternetExplorerOptions(); 
      options.IntroduceInstabilityByIgnoringProtectedModeSettings = true; 
      driver = new InternetExplorerDriver(options); 

任何建议如何解决这个问题?

+0

你试过了哪些驱动程序?你是否尝试过不同的元素定位器?如果您在IDE中尝试同样的操作会发生什么? – Arran

+0

我使用InternetExplorerDriver与指定的选项。我尝试了不同的定位器,但正如我所说 - 按钮点击正在发生,但之后 - 没有登录事件。所以我认为问题在别的地方。在IDE中,这是工作 – andree

+0

IDE是在Firefox中。您是否尝试过使用firefoxDriver并查看问题是否特定于IEDriver? –

回答

1

这种情况经常发生在我身上,但不知道它是否与你的原因相同。

当您在本地运行测试时,所有操作(sendkeys,click等)都会很快发生。在用户在字段loginForm:usernameloginForm:password中输入文本之前,loginForm:login按钮可以保持禁用状态。因此,按钮loginForm:login可能在点击时未被激活。

所以我会建议使用明确的等待来检查单击它之前是否显示元素ID loginForm:login这一步基本上没用,但它所做的只是在“发送密钥”到密码文本框字段并单击“提交”之间浪费一些时间。

同样为了快速检查,您也可以在输入密码并单击登录按钮之前执行与sleep 2类似的操作(使脚本睡眠2秒钟)。

如果您最终计划在远程计算机上运行此操作,则不需要执行上述两个步骤中的任何操作,由于计算机之间的通信造成的时间延迟足以使整个过程顺利进行。

(在linkedin登录页面发生同样的问题 - 除非输入用户名和密码,否则登录按钮被禁用,但是webdriver执行每一步的速度,登录按钮在点击时无效)。

相关问题