您好我正在调用登录函数,但它会抛出一个找不到会话的异常 我已将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毫秒
答案 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(UserName);
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(UserName);
Driver.findElement(By.xpath("//input[@name='Brand']")).sendKeys(BrandName);
Driver.findElement(By.xpath("//input[@name='CmdLogin']")).click();
String Title=Driver.getTitle();
// and so on...
}
}
主要保持不变。