我正在尝试使用Selenium for Java创建一个简单的框架。尝试进行此设置的一个不幸方面是,我无权在Windows计算机上编辑SYSTEM级别的变量。
在尝试运行仅试图访问网站的单个JUnit测试,然后断言它位于我所指向的页面上时,我不断收到错误消息,指出必须设置ChromeDriver可执行文件的路径。我确实已在本地下载了此内容。
Private Sub UpdateStatus()
If Not ApplicationForm Is Nothing Then
If ApplicationForm.InvokeRequired Then
Dim UpdateInvoker As New MethodInvoker(AddressOf UpdateStatus)
Try
ApplicationForm.Invoke(UpdateInvoker)
Catch ex As Exception
Dim InvokeError As New ErrorHandler(ex)
InvokeError.LogException()
End Try
Else
UpdateApplicationProgress()
End If
End If
End Sub
Private Sub UpdateApplicationProgress()
Dim Changed As Boolean = False
If Not ApplicationForm Is Nothing Then
With ApplicationForm
If Not CurrentStatusText Is Nothing Then
If Not ApplicationStatusLabel Is Nothing Then
If ApplicationStatusLabel.Text <> CurrentStatusText Then
Changed = True
ApplicationStatusLabel.Text = CurrentStatusText
End If
End If
If Not ApplicationToolStripLabel Is Nothing Then
If ApplicationToolStripLabel.Text <> CurrentStatusText Then
Changed = True
ApplicationToolStripLabel.Text = CurrentStatusText
End If
End If
End If
If Not ApplicationProgressBar Is Nothing Then
If ApplicationProgressBar.Value <> CurrentProgress Then
Changed = True
ApplicationProgressBar.Value = CurrentProgress
End If
End If
End With
If Changed Then
ApplicationForm.Refresh()
End If
Application.DoEvents()
End If
End Sub
现在,我可以通过在程序的主要入口点内的类中抛出Caused by: java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.chrome.driver system property; for more information, see https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver. The latest version can be downloaded from http://chromedriver.storage.googleapis.com/index.html
来避免该错误,但是不确定如何使用单元测试解决该问题。
我的基本测试:
System.setProperty("webdriver.chrome.driver", "/path/to/myexecutable.exe")
还有我的三个简单的类-浏览器,主页和页面:
浏览器
package com.mytestpackage;
import org.junit.Assert;
import org.junit.Test;
public class UnitTest {
@Test
public void canGoToHomePage() {
Pages.homePage().goTo();
Assert.assertTrue(Pages.homePage().isAt());
}
}
主页
package com.mytestpackage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class Browser {
static WebDriver driver = new ChromeDriver();
public static void goTo(String url) {
driver.get(url);
}
public static String title() {
return driver.getTitle();
}
}
页面
package com.mytestpackage;
public class HomePage {
static String url = "http://test.salesforce.com";
static String title = "Login | Salesforce";
public void goTo() {
Browser.goTo(url);
}
public boolean isAt() {
return Browser.title().equals(title);
}
}
无奈的要点是无法编辑系统变量。任何破解/解决方法建议将不胜感激。
答案 0 :(得分:3)
看来您看到的问题已由WebDriverManager解决-official docs
我们在框架中使用它,它使所有用户都无需承担系统属性和chromedriver版本。 (当您使用chromedriver的可执行文件时,您需要确保也随浏览器更新一起对其进行更新)
在测试类中添加以下方法:
@BeforeClass
public static void setupClass() {
WebDriverManager.chromedriver().setup();
}
不要忘记在pom.xml中将依赖项附加到WebDriverManager(需要Java 8或更高版本):
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>3.0.0</version>
<scope>test</scope>
</dependency>
...或在Gradle项目中:
dependencies {
testCompile("io.github.bonigarcia:webdrivermanager:3.0.0")
}
重要的旁注::从Browser类中的WebDriver字段声明中删除“静态”。保持静态将不允许您继续执行并行测试。