在selenium中调用函数时使用Internet Explorer观察,SessionNotFoundException

时间:2016-07-18 11:59:27

标签: internet-explorer selenium selenium-webdriver

您好我正在调用登录函数,但它会抛出一个找不到会话的异常 我已将Login保存为库

import lib.Login;
public class MessageBoard {
WebDriver driver;
@BeforeMethod
public void initalise()
{
    System.setProperty("webdriver.ie.driver",     "C:\\Eclipse\\IEDriverServer.exe");
    DesiredCapabilities caps=new DesiredCapabilities();
    caps.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
    driver=new InternetExplorerDriver(caps);
}

@Test
public void LogintoSystem()
{

    driver.manage().window().maximize();
    driver.get("http://segotn11540.rds.volvo.com/vss_connect_testr1/Login/Login.aspx");
    Login login=new Login("TYP40FI","Volvo");

}
  

我收到以下错误   失败:登录系统   org.openqa.selenium.remote.SessionNotFoundException:启动Internet Explorer时出现意外错误。保护模式设置对于所有区域都不相同。必须将启用保护模式设置为所有区域的相同值(启用或禁用)。 (警告:服务器未提供任何堆栈跟踪信息)   命令持续时间或超时:555毫秒

2 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,打开IE并确保互联网选项中的所有区域相同 - >安全性,将浏览器中的保护模式设置更改为相同,启用或禁用,但我建议禁用,如果它仅用于测试目的。 这是一个很好的资源: Jim Evans关于保护模式破解的注意事项 http://jimevansmusic.blogspot.ca/2012/08/youre-doing-it-wrong-protected-mode-and.html: “对于那些无法设置IE设置的人来说,驱动程序需要一种解决方法,因为他们的机器被过度锁定了。 这就是功能设置的用途。它只是绕过了注册表检查。 但是,使用该功能并不能解决潜在的问题。如果越过保护模式边界, 可能会导致非常意外的行为,包括挂起,元素位置不起作用以及未传播的点击。 为了帮助警告人们这个潜在的问题,这个能力被赋予了很大的可怕名字 Java中的INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS和.NET中的IntroduceInstabilityByIgnoringProtectedModeSettings。“

答案 1 :(得分:0)

https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver

•在Windows Vista或Windows 7上的IE 7或更高版本中,必须将每个区域的保护模式设置设置为相同的值。只要每个区域的值相同,该值就可以打开或关闭。要设置保护模式设置,请选择" Internet选项..."从“工具”菜单中,单击“安全”选项卡。对于每个区域,选项卡底部将显示一个复选框,标记为"启用保护模式"。

----------------------------- EDITED ----------------- ----------------------

我看到实际问题,你基本上有2个不同的网络驱动程序。 1在主测试上,另一个在Login类上。我建议您将webdriver从main传递给Login类

public class Login
{
   WebDriver driver;
   public Login(String UserName,String BrandName, WebDriver Driver)
   {
      driver = Driver; // Assign the driver from main to this Login class
      driver.findElement(By.xpath("//input[@name='UserNameInputText']")).sendKeys(Us‌​erName);
      driver.findElement(By.xpath("//input[@name='Brand']")).sendKeys(BrandName);
      driver.findElement(By.xpath("//input[@name='CmdLogin']")).click();
      String Title=driver.getTitle();
      // and so on...
   }
}

然后在你的主要

@Test
public void LogintoSystem()
{

    driver.manage().window().maximize();
    driver.get("http://segotn11540.rds.volvo.com/vss_connect_testr1/Login/Login.aspx");
    Login login=new Login("TYP40FI","Volvo", driver); // pass the driver

}

因此,您拥有相同会话的相同驱动程序。

-----------编辑2 ---------------------

在Login类中删除WebDriver并使用driver参数来完成这项工作。

public class Login
{
   public Login(String UserName,String BrandName, WebDriver Driver)
   {
      Driver.findElement(By.xpath("//input[@name='UserNameInputText']")).sendKeys(Us‌​erName);
      Driver.findElement(By.xpath("//input[@name='Brand']")).sendKeys(BrandName);
      Driver.findElement(By.xpath("//input[@name='CmdLogin']")).click();
      String Title=Driver.getTitle();
      // and so on...
   }
}

主要保持不变。