我正在更新我后来写的一个Selenium程序,其中一部分已停止工作。我想在页面上浏览一系列链接,单击每个链接,确保存在一些预期的文本。但有时会在所需页面之前出现登录页面(https://library.med.nyu.edu/sso/ezproxy_form.php),在这种情况下,我需要在检查页面之前登录。 问题是,无论我输入什么字符串来检查我是否登陆登录页面,Selenium都认为它不存在并跳过登录,显然导致其他一切都失败。见下文 - 我不确定那确实是问题所在。似乎相反,它正在匆匆通过“如果我们需要登录”代码而没有实际登录,那么显然未通过测试的主要部分,因为它不在正确的页面上。
这是代码 - 有人看到我的错误吗?
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 :(得分:1)
登录页面是否有页面标题?如果是,请尝试使用 selenium.getTitle()方法验证页面标题,以检查您是否要前往登录页面。如果没有,请继续单击链接而不登录。
我认为页面标题验证可以帮助解决此问题
答案 1 :(得分:1)
尝试推杆:
selenium.setSpeed("1000");
在selenium.open之后,这将在selenium命令之间注入1秒延迟(1000ms)。您应该将其添加为标准做法,特别是如果您没有运行无头浏览器。
您也可以考虑使用,因为您知道在登录页面上您希望打开的URL,即selenium命令getLocation。这将返回当前页面的绝对URL。可能比尝试查找可在页面内随时更改的元素更有效。
所以在上面的代码中使用getLocation:
if (selenium.getLocation() == "your reference url"){
do your login stuff here
}
这只是一个例子来说明我在说什么。希望它可以帮助你。