我有一个spring mvc web-app,它基本上在客户端机器上运行selenium测试。
我使用以下命令在客户端系统中创建了一个selenium-hub和节点 -
>java -jar selenium-server-standalone-3.0.1.jar -role hub
>java -Dwebdriver.ie.driver=D:\IEDriver\IEDriverServer.exe -jar selenium-server-standalone-3.0.1.jar -role node -hub http://localhost:4444/grid/register -timeout 20 -browserTimeout 60
我的spring控制器获取url参数并使用RemoteWebDriver在客户端系统中使用该参数运行selenium测试
这是我的弹簧控制器 -
@RequestMapping("/remote-app/{policyNumber}")
public @ResponseBody String getOIPA(@PathVariable("policyNumber") String polNumber,HttpServletRequest request) throws MalformedURLException
{
String clientIp = request.getRemoteAddr();
System.out.println("Input policy number : "+polNumber);
System.out.println("Client IP : "+clientIp);
oipaService.openOipaAddressScreenRemote(polNumber,clientIp);
return "hello "+polNumber+" "+clientIp;
}
这是我运行测试的服务方法 -
public void openOipaAddressScreenRemote(String policyNumber,String ip) throws MalformedURLException {
System.out.println("Policy number input : "+policyNumber);
String oipaURL = "https://mydom.com/PASJava_Term";
String userName = "user";
String password = "pwd";
//-------------------
String remoteUrlString = "http://"+ip+":4444/wd/hub";
System.out.println(remoteUrlString);
DesiredCapabilities caps = DesiredCapabilities.internetExplorer();
caps.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
WebDriver driver = new RemoteWebDriver(new URL(remoteUrlString),caps);
//-------------------
driver.get(oipaURL);}
它在我的组织的客户端系统(PC)中为我提供了期望的结果,该客户端系统连接到客户端的IPv4地址。
但问题是,当我在我的组织中使用笔记本电脑客户端时,它会返回IPv6,该应用程序无法连接。
他们通过笔记本电脑名称连接,例如 - lt00123 。
即selenium RemoteWebDriver能够连接到http://lt00123:4444/wd/hub
如果可能的话,如何根据需要识别客户端地址(ipv4或机器名称)。
编辑:使用here 解决方案后,我解决了IPv6问题。从here我发现我需要在一台机器(最好是在服务器位置)设置集线器,并在客户端机器上使用集线器设置节点。现在我的春季控制器不需要知道客户的地址。它已经知道了枢纽的位置。
答案 0 :(得分:0)
我对代码做了一些改动 -
在服务器位置设置集线器 -
>java -jar selenium-server-standalone-3.0.1.jar -role hub -port 4444
在客户端计算机上设置节点 -
>java -Dwebdriver.ie.driver=D:\IEDriver\IEDriverServer.exe -jar selenium-server-standalone-3.0.1.jar -role node -hub http://[server ip]:4444/grid/register -timeout 20 -browserTimeout 60
控制器 -
@RequestMapping("/remote-app/{policyNumber}")
public @ResponseBody String getOIPA(@PathVariable("policyNumber") String polNumber) throws MalformedURLException
{
String clientIp = request.getRemoteAddr();
System.out.println("Input policy number : "+polNumber);
oipaService.openOipaAddressScreenRemote(polNumber);
return "hello "+polNumber;
}
服务方法 -
public void openOipaAddressScreenRemote(String policyNumber) throws MalformedURLException {
System.out.println("Policy number input : "+policyNumber);
String oipaURL = "https://mydom.com/PASJava_Term";
String userName = "user";
String password = "pwd";
//-------------------
String remoteUrlString = "http://"+{server ip here}+":4444/wd/hub";
System.out.println(remoteUrlString);
DesiredCapabilities caps = DesiredCapabilities.internetExplorer();
caps.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
WebDriver driver = new RemoteWebDriver(new URL(remoteUrlString),caps);
//-------------------
driver.get(oipaURL);
}
现在我的控制器不需要知道客户端的IP。我不是在每台客户机中使用一个集线器和一个节点,而是在服务器中使用一个集线器,在每个客户机中使用一个节点。
现在,我可以在多个客户端上的客户端系统上从客户端进行测试。