getTitle()函数在Selenium Web驱动程序中返回不正确的结果

时间:2017-04-26 07:47:53

标签: java selenium testing automation

我正在尝试运行一个简单的自动化测试脚本来获取网页标题并通过Java和IE在selenium-webdriver中使用来验证它,但getTitle()方法返回奇怪的结果。

我可以看到,当我运行我的测试脚本时,最初是加载一个带有以下URL的默认页面,

http://localhost:44585/

然后导航到我的目标网址(在脚本中提到)。

但是脚本仍然从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();
    }
}

3 个答案:

答案 0 :(得分:1)

关于你的剧本的几句话 -

使用Selenium 3.4.0,IEDriverServer 3.4.0& IE 10.0.x我在代码中没有看到任何问题,但这里有几点:

  1. 加载默认页面http://localhost:44585/ - 是的,这就是IEDriverServer的工作原理。我们无法帮助它。

  2. WebDriver my_browser; - 作为一种优秀的编程习惯,您应该让代码易于理解,以便进行评论。同行评审。因此WebDriver的实例应为driver或类似的行。

  3. String title = "Google"; - 此处变量的名称应为Expected_title,其名称应与String Actual_title;

  4. 类似
  5. Actual_title.contentEquals(title) - 您已使用if ( Actual_title.contentEquals(title)),因为您已将网页标题仅视为" Google"。但在大多数情况下,您只是通过查看就无法看到整个页面标题。您必须查看页面源以观察整个页面标题。因此,在您的情况下,而不是Actual_title.contentEquals(title),您可以使用if ( Actual_title.contains(title)),这样您的Testcase就不会失败。

  6. 如果您在尝试在加载页面之前找到元素时发现代码失败,请添加implicitlyWait以加载页面。

  7. driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);

    1. 如果您在尝试定位元素时发现代码失败,即使在加载页面后也是如此,请为DOM中的元素添加explicitWait。

答案 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);

如果它解决了您的问题,请告诉我。