1. 程式人生 > >使用selenium grid分布式執行之一

使用selenium grid分布式執行之一

dom whole asd jnl web int user orm tcap

目前ui框架會做一個更新,把原有的Jenkins分布式方式換成grid方式,換成grid方式有兩個好處,1.grid的資源占用比Jenkins的jnlp占用資源少 2.grid可控制不同瀏覽器同時跑

看很多網上跑自己的案例都很順,想直接拿過來用,中間遇到很多問題,發現自己的電腦,啟動多個瀏覽器後,只會執行1個瀏覽器,讀取數據庫中的控件,報空指針問題等,類似並發的問題,最開始懷疑testng多線程問題,折騰了一天,發現是因為我們設計模式問題,並發中driver被覆蓋了,哎,,,之後並發有遇到很多問題,為了不耽誤項目進度,目前不考慮並發了,記錄我最開始使用的demo

public class login {
	private WebDriver dr;
	DesiredCapabilities test;
	String baseUrl;

	String testExpectedStr;
	String requestId;
	String domainName = "https://www.rosewholesale.com/";
	String getkeys = "ths#^$%^sdaf%T#$%^fasdbhf&U*$%%$^#";

	@Parameters({ "browser", "nodeUrl", "webSite" })
	@BeforeClass
	public void BeforeClass(String browser, String nodeUrl, String webSite) {
		baseUrl = webSite;
		if (browser.equals("ie")) {
			test = DesiredCapabilities.internetExplorer();
		} else if (browser.equals("ff")) {
			test = DesiredCapabilities.firefox();
		} else if (browser.equals("chrome")) {

			String url = nodeUrl + "/wd/hub";
			URL urlInstance = null;
			try {
				urlInstance = new URL(url);
			} catch (MalformedURLException e) {
				e.printStackTrace();
				System.out.println("實例化url出錯,檢查一下url格式是否正確,格式為:http://192.168.40.67:5555");
			}
			System.out.println(test);

			System.out.println("使用的平臺進行啟動的瀏覽器");
			String platform_name = "win7";
			DesiredCapabilities capabilities = new DesiredCapabilities();
			if (platform_name.equalsIgnoreCase("win7")) {
				capabilities.setPlatform(Platform.VISTA);
			}
			if (platform_name.equalsIgnoreCase("win8")) {
				capabilities.setPlatform(Platform.WIN8);
			}
			if (platform_name.equalsIgnoreCase("win8_1")) {
				capabilities.setPlatform(Platform.WIN8_1);
			}
			if (platform_name.equalsIgnoreCase("win10")) {
				capabilities.setPlatform(Platform.WIN10);
			}
			if (platform_name.equalsIgnoreCase("linux")) {
				capabilities.setPlatform(Platform.LINUX);
			}
			capabilities.setBrowserName(browser);
			capabilities.setVersion(browser);
			ChromeOptions options = new ChromeOptions();
			options.addArguments("disable-infobars");
			if (platform_name.equalsIgnoreCase("linux")) {
				options.addArguments(Arrays.asList("--window-position=0,0"));
				options.addArguments(Arrays.asList("--window-size=1920,1080"));
			} else {
				options.addArguments(Arrays.asList("--start-maximized"));
			}
			capabilities.setCapability("chrome.switches", Arrays.asList("--incognito"));
			options.addArguments("--test-type");
			options.addArguments("start-maximized");
			options.addArguments("chrome.switches", "--disable-extensions");

			capabilities.setCapability(ChromeOptions.CAPABILITY, options);
			try {
				dr = new RemoteWebDriver(new URL(url), capabilities);
			} catch (MalformedURLException e) {
				e.printStackTrace();
			}
		} else {
			System.out.println("browser參數有誤,只能為ie、 ff、chrome");
		}
		dr.get(webSite);
	}

	@Test
	public void signin_wrongemail() {
		Pub.checkStatusBrowser();

		以下是測試方法

	}

 以下是xml配置文件,並發方式以tests方式運行,class就是類名,以下包含一個登錄一個註冊

<suite name="template"  parallel="tests" thread-count="5" >
 
	<test name="FirstTest"  >
	   	<parameter name="browser" value="chrome"/>
    	<parameter name="nodeUrl" value="http://10.33.6.230:5555"/>
    	<parameter name="webSite" value="http://login.rosewholesale.com.trunk.s1.egomsl.com/m-users-a-sign.htm"/>
	    <classes>
	        <class name="com.globalegrow.login.login">	
			</class>
		</classes>
	</test>	
	<test name="FirstTest2"  >
	    <parameter name="browser" value="chrome"/>
    	<parameter name="nodeUrl" value="http://10.40.2.113:5555"/>
    	<parameter name="webSite" value="http://login.rosewholesale.com.trunk.s1.egomsl.com/m-users-a-sign.htm"/>
	    <classes>
	        <class name="com.globalegrow.login.registered">	
			</class>
		</classes>
	</test>	
</suite>

  

使用selenium grid分布式執行之一