2011-08-10 132 views
1

我正在更新一个Selenium程序,我写了一段时间,但它的一部分已停止工作。我想浏览一个页面上的一系列链接,点击每个链接,确保有一些预期的文本存在。但有时登录页面(https://library.med.nyu.edu/sso/ezproxy_form.php)出现在所需的页面之前,在这种情况下,我需要在检查页面之前登录。 问题是,无论我输入什么字符串来检查我是否登录页面,Selenium都认为它不存在并跳过登录,显然导致其他所有内容都失败。 见下文 - 我不确定这实际上是什么问题。它似乎是在没有实际登录的情况下冲过“如果我们需要登录”代码,然后明显地失败了测试的主要部分,因为它不在正确的页面上。selenium.waitForPageToLoad似乎并没有在等待

下面是代码 - 没有人看到我的错误吗?

 for (int i = 0; i < Resources.size(); i++) { 
     try { 
         selenium.open("/"); 
         selenium.click("link=" + Resources.get(i).link); 
         selenium.waitForPageToLoad("100000"); 
         if (selenium.isTextPresent("Please sign in to access NYUHSL e-resources")) { 
          selenium.type("sso_user", kid); 
          selenium.type("sso_pass", password); 
          selenium.click("name=SignIn"); 
          selenium.waitForPageToLoad("100000"); 
         } 

         if (!selenium.isTextPresent(Resources.get(i).text)) { 
          outfile.println(Resources.get(i).name + " failed"); 
         } 
        } catch (Exception e) { 
         outfile.println(Resources.get(i).name + " could not be found--link removed?"); 
        } 
     } 
+0

你得到了什么确切的错误信息? – Feanor

回答

1

登录页面是否有页面标题?如果是,请尝试使用selenium.getTitle()方法验证页面标题,以检查您是否前往登录页面。如果没有,请点击链接无需登录

我想页面标题验证可以帮助解决这个问题

+0

谢谢。我花了一些时间来处理这个问题,并添加了getTitle()函数。不幸的是,这并没有帮助。看起来时间上有些问题,即使我将等待时间增加到400000(!),并在第一个if语句内移动了第二个等待时间。看起来这个程序在没有等待的情况下,通过点击而乱飞。在登录页面甚至加载之前,它开始寻找Resources.get(i).name,决定它不在那里,然后直接重新打开“/”。它似乎并不尊重等待! – umbraphile

+0

这很奇怪。它超时了吗?什么是确切的错误信息?您可以在catch块中使用e.printstacktrace()来获取调试问题的详细例外 – 2011-08-10 22:07:18

+0

我不认为它超时。假设我正在测试纽约时报的链接是否有效,并且它正在寻找的文本是“©2011纽约时报公司”的页脚。我在Firefox的日志窗口中看到的内容是,它运行在我的代理登录页面上,并且在几分之一秒内通过并查找“©2011纽约时报公司”,因为它在登录状态而失败页面仍然存在,并且它开始循环,返回到我的主页并尝试测试下一个链接。 – umbraphile

1

尝试把:

selenium.setSpeed("1000"); 

权selenium.open在此之后将注入1硒命令之间的第二延迟(1000毫秒)。您应该将其添加为标准做法,特别是如果您没有运行无头浏览器。

此外,您可能会考虑使用,因为您知道如果您在登录页面上显示的网址,selenium命令getLocation。这将返回当前页面的绝对URL。可能比尝试查找页面内随时可能更改的元素更有效。

所以在上面的代码中使用的getLocation:

if (selenium.getLocation() == "your reference url"){ 
do your login stuff here 
} 

再次,这是只是为了说明我在说什么的样本。希望它能帮助你。

+0

谢谢!我已经发现了更多关于这个问题的知识(我经常没有时间去开展这个项目),结果我误解了它 - 我想我应该发布一个新问题,因为它很不相同 - 它在做页面重定向太快以致于无法“看见”它们。 – umbraphile