我正在尝试运行一个简单的自动化测试脚本来获取网页标题并通过Java和IE在selenium-webdriver中使用来验证它,但getTitle()方法返回奇怪的结果。
我可以看到,当我运行我的测试脚本时,最初是加载一个带有以下URL的默认页面,
然后导航到我的目标网址(在脚本中提到)。
但是脚本仍然从localhost URL上面捕获页面标题,而不是从目标URL捕获。请告知我如何绕过默认(http://localhost:44585/)页面。
脚本
public class start_with {
public static void main (String [] args)
{
String url ="http://google.com";
String title = "Google";
String Actual_title;
System.setProperty("webdriver.ie.driver", "C:\\..\\IEDriverServer.exe");
WebDriver my_browser;
my_browser = new InternetExplorerDriver();
my_browser.get(url);
Actual_title = my_browser.getTitle();
if ( Actual_title.contentEquals(title))
System.out.println(" Test Passed");
else
System.out.println(" Test Failed \n Title is "+ Actual_title);
my_browser.close();
}
}
答案 0 :(得分:1)
关于你的剧本的几句话 -
使用Selenium 3.4.0,IEDriverServer 3.4.0& IE 10.0.x我在代码中没有看到任何问题,但这里有几点:
加载默认页面http://localhost:44585/
- 是的,这就是IEDriverServer的工作原理。我们无法帮助它。
WebDriver my_browser;
- 作为一种优秀的编程习惯,您应该让代码易于理解,以便进行评论。同行评审。因此WebDriver
的实例应为driver
或类似的行。
String title = "Google";
- 此处变量的名称应为Expected_title
,其名称应与String Actual_title;
Actual_title.contentEquals(title)
- 您已使用if ( Actual_title.contentEquals(title))
,因为您已将网页标题仅视为" Google"。但在大多数情况下,您只是通过查看就无法看到整个页面标题。您必须查看页面源以观察整个页面标题。因此,在您的情况下,而不是Actual_title.contentEquals(title)
,您可以使用if ( Actual_title.contains(title))
,这样您的Testcase就不会失败。
如果您在尝试在加载页面之前找到元素时发现代码失败,请添加implicitlyWait以加载页面。
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
答案 1 :(得分:0)
这可能是时间问题,在新页面完全加载之前,您很快就会获取标题。为了测试,尝试放一些睡眠并获得标题。所以在你的代码中它看起来像这样:
my_browser.get(url);
Thread.sleep(15000);
Actual_title = my_browser.getTitle();
如果它有效,那么删除这个讨厌的Thread.sleep()
并安排一些更好的服务员。
答案 2 :(得分:0)
您可能需要为Webdriver设置适当的 pageLoadTimeout 。在执行 get(); 方法打开所需的URL之前,您可以按以下方式设置pageloadtimeout:
driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);
如果它解决了您的问题,请告诉我。