【问题标题】:How to set path for executable IE drivers in Selenium WebDriver如何在 Selenium WebDriver 中设置可执行 IE 驱动程序的路径
【发布时间】:2014-02-15 00:48:09
【问题描述】:

我正在尝试在我的机器上运行以下代码(win XP & IE8)

public class bookie {                
  private WebDriver driver;        
  private String baseUrl;         
  private boolean acceptNextAlert = true;        
  private StringBuffer verificationErrors = new StringBuffer();        

  @Before    
  public void setUp() throws Exception {    
    DesiredCapabilities caps = DesiredCapabilities.internetExplorer();    
    caps.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true);    
    driver = new InternetExplorerDriver(caps);     
    baseUrl = "http://book.theautomatedtester.co.uk/";     
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);    
  }

  @Test     
  public void testbookie() throws Exception {    
    System.setProperty("webdriver.ie.driver", "IEDriverServer.exe");    
    driver.get(baseUrl + "/");    
    driver.findElement(By.linkText("Chapter1")).click();    
    driver.findElement(By.id("radiobutton")).click();    
    new Select(driver.findElement(By.id("selecttype"))).selectByVisibleText("Selenium Core");    
    driver.findElement(By.linkText("Home Page")).click();     
    driver.findElement(By.linkText("Chapter2")).click();    
    driver.findElement(By.id("but1")).click();     
    driver.findElement(By.xpath("//input[@value='Sibling Button']")).click();     
    driver.findElement(By.linkText("Index")).click();      
    driver.findElement(By.linkText("Chapter1")).click();     
    new Select(driver.findElement(By.id("selecttype"))).selectByVisibleText("Selenium Grid");     
    driver.findElement(By.linkText("Home Page")).click();      
    driver.quit();
  }

但是提供给我的堆栈跟踪是

java.lang.IllegalStateException:驱动程序可执行文件的路径 必须由 webdriver.ie.driver 系统属性设置;在 org.openqa.selenium.remote.service.DriverService.findExecutable(DriverService.java:105) 在 org.openqa.selenium.ie.InternetExplorerDriverService.access$1(InternetExplorerDriverService.java:1) 在 org.openqa.selenium.ie.InternetExplorerDriverService$Builder.build(InternetExplorerDriverService.java:230) 在 org.openqa.selenium.ie.InternetExplorerDriver.setupService(InternetExplorerDriver.java:263) 在 org.openqa.selenium.ie.InternetExplorerDriver.(InternetExplorerDriver.java:182) 在 org.openqa.selenium.ie.InternetExplorerDriver.(InternetExplorerDriver.java:159) 在 bookie.setUp(bookie.java:19) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)在 java.lang.reflect.Method.invoke(未知来源)在 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 在 org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 在 org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) 在 org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) 在 org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 在 org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 在 org.junit.runners.ParentRunner.run(ParentRunner.java:309) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38) 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

【问题讨论】:

  • 由于您没有为 IEDriver 指定 确切 路径,它会在您的 PATH 变量中查找,并且可能是当前工作目录。我还建议您删除您设置的不稳定设置。
  • 非常感谢您的回复 Arran.. 现在一切正常.. 但我仍然想更仔细地研究/理解事物。所以..我理解你所说的大部分内容..除了“不稳定设置”部分。你能详细说明一下吗..我是新手..

标签: java internet-explorer selenium-webdriver


【解决方案1】:

将驱动程序放置在某个位置,例如 C:\Selenium\iexploredriver.exe

然后

File file = new File("C:/Selenium/iexploredriver.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
WebDriver driver = new InternetExplorerDriver();

下面一行应该是 setUp() 函数的第一行

System.setProperty("webdriver.ie.driver", "IEDriverServer.exe");   

【讨论】:

  • 我的驱动程序是 IEDriverServer.exe,所以我插入了它,但是在执行代码时,打开了 2 个 IE 窗口,与基本 URL 无关。控制台显示: INFO: Retrying request Started InternetExplorerDriver server (32-bit) 2.39.0.0 Listening on port 33671 Jan 24, 2014 12:06:00 PM org.apache.http.impl.client.DefaultRequestDirector tryExecute INFO: I/ O 处理请求时捕获的异常(org.apache.http.NoHttpResponseException):目标服务器未能响应 2014 年 1 月 24 日 12:06:00 PM org.apache.http.impl.client.DefaultRequestDirector tryExecute INFO: Retrying request跨度>
【解决方案2】:

与上述解决方案类似,但具有所需的功能

System.setProperty("webdriver.ie.driver","C:\\IEDriverServer.exe");
DesiredCapabilities dc = DesiredCapabilities.internetExplorer();
dc.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);  //If IE fail to work, please remove this and remove enable protected mode for all the 4 zones from Internet options
WebDriver driver = new InternetExplorerDriver(dc);

【讨论】:

    猜你喜欢
    • 2016-04-29
    • 2021-05-20
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多