Selenium Grid和IE /Firefox各种填坑

时间:2021-08-13 17:41:38

使用selenium grid的步骤

1、确保hub和node都安装并且配置好了java jdk.

2、在hub上运行以下命令。

java -jar C:\Software\selenium\selenium-server-standalone-2.40.0.jar -role hub -port 4444

其中,-port 4444是可选的,不指定的话,默认是4444端口

3、在用作Node的电脑上运行以下命令

java -Dwebdriver.chrome.driver="C:\webdrivers\chromedriver.exe" -Dwebdriver.ie.driver="C:\webdrivers\IEDriverServer.exe" -Dwebdriver.gecko.driver="C:\webdrivers\geckodriver.exe" -jar C:\selenium-server\selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.60.66:4444/grid/register -host 192.168.60.61 -port 5566

一口气把各种webdriver的地址都加进去了

问题就来了。

因为我的node电脑有两个物理网卡和两个虚拟网卡,HUB也有两个网卡,一个连外网,一个连内网。

两个物理网卡当中的一张通过网线与Hub相连,并且确定是互联互通的,但是另外一张物理网卡是WIFI,虽然WIFI与HUB在同一路由下,但WIFI与HUB的有线网卡并不是同一个局域网网段。这就导致后来执行测试脚本时各种报错。

后来我重新运行Java -jar命令,并指定了Node的IP地址和端口,如上是完整命令,下面是重点选项。

-host 192.168.60.61 -port 5566

经过这些坑,两台电脑的selenium是能够联通了。

但是有遇到了IE保护模式和ZOOM LEVEL这个破事儿,这个问题,需要改java代码。

改好的java代码在下面。

package com.qa.data;
import java.net.MalformedURLException;
import java.net.URL; import org.openqa.selenium.By;
import org.openqa.selenium.Platform;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.Test; public class ExcelData { @SuppressWarnings("deprecation")
@Test
public void openBrowser() throws MalformedURLException, InterruptedException { DesiredCapabilities cap=DesiredCapabilities.internetExplorer();
cap.setBrowserName("internet explorer"); //以下三句,很多网上的文章都没加,我KAO,不加这三句它们的IE是怎么跑起来的?
cap.setCapability(InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION, true);
cap.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
cap.setCapability("ignoreZoomSetting", true);//忽略IE浏览器的ZOOM LEVEL,不加这句会报错。每次selenium打开ie都是他妈的150%放大倍数,狗日的IE+SELENIUM
cap.setPlatform(Platform.WINDOWS);
URL url=new URL("http://192.168.60.61:5566/wd/hub");
WebDriver driver=new RemoteWebDriver (url,cap);
driver.get("http://www.baidu.com");
driver.manage().window().maximize();
String t=driver.getTitle();
System.out.println(t);
Thread.sleep(3000);
driver.findElement(By.id("kw")).sendKeys("天气");
Thread.sleep(1000);
driver.findElement(By.id("su")).click();
Thread.sleep(3000);
driver.quit();
} }

关于填坑的截图,坑爹啊。

Selenium Grid和IE /Firefox各种填坑

第二张图

Selenium Grid和IE /Firefox各种填坑

Firefox在remote web driver打开的正确方式。

这也是一个坑,以前WebDriver driver=new FirefoxDriver()不管用了,

要使用下面的方法。

不能使用DesiredCapabilities cap=DesiredCapabilities.firefox();

package com.qa.data;

import java.net.MalformedURLException;
import java.net.URL; import org.openqa.selenium.By;
import org.openqa.selenium.Platform;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.Test; public class FirefoxTest {
@Test
public void openFirefox() throws MalformedURLException, InterruptedException { /*这段不需要
System.setProperty("webdriver.gecko.driver",
"C:\\webdrivers\\geckodriver.exe");
*/ FirefoxOptions option=new FirefoxOptions();
String binaryPath="C:\\Program Files\\Mozilla Firefox\\firefox.exe";
//注意,是firefox.exe在远程Node电脑的路径,不是gecko.driver
option.setBinary(binaryPath); URL url=new URL("http://192.168.60.61:5566/wd/hub");
WebDriver driver=new RemoteWebDriver (url,option); driver.get("http://www.baidu.com");
driver.manage().window().maximize();
String t=driver.getTitle();
System.out.println(t);
Thread.sleep(3000);
driver.findElement(By.id("kw")).sendKeys("天气");
Thread.sleep(1000);
driver.findElement(By.id("su")).click();
Thread.sleep(3000);
driver.quit();
}
}