1.在已加载了JQuery的页面上可以直接使用JQuery选择器
例如www.jquery.com网站,如果我们想定位红框中导航栏中的偶数为就可以使用jquery的伪选择器:even
WebDriver中使用JQuery选择器
具体实现如下
packagecom.example.tests; importstaticorg.junit.Assert.*; importjava.util.*; importorg.junit.*; importorg.openqa.selenium.*; importorg.openqa.selenium.ie.InternetExplorerDriver; publicclasstest{ WebDriverdriver=newInternetExplorerDriver(); JavascriptExecutorjse=(JavascriptExecutor)driver; @Test publicvoidjQueryTest(){ driver.get("http://www.jquery.com/"); //在executeScript中调用jQuery.find(jquerySelector); List<WebElement>elements= (List<WebElement>)jse.executeScript("returnjQuery.find"+"('.menu-itema:even')"); assertEquals(3,elements.size()); assertEquals("Download",elements.get(0).getText()); assertEquals("Blog",elements.get(1).getText()); assertEquals("BrowserSupport",elements.get(2).getText()); driver.close(); } } |
2.另一种情况就是页面没有另载jQuery,我们需要先判断再自已手动注入,以百度为例,百度首页是没有加载的
packagecom.example.tests; importstaticorg.junit.Assert.*; importjava.util.*; importorg.junit.*; importorg.openqa.selenium.*; importorg.openqa.selenium.ie.InternetExplorerDriver; publicclassSelenium2{ WebDriverdriver=newInternetExplorerDriver(); JavascriptExecutorjse=(JavascriptExecutor)driver; @Test publicvoidjQueryTest(){ driver.get("http://www.baidu.com/"); injectjQueryIfNeeded(); List<WebElement>elements=(List<WebElement>)jse .executeScript("returnjQuery.find('#nva')"); assertEquals(7,elements.size());//验证超链接的数量 for(inti=0;i<elements.size();i++){ System.out.print(elements.get(i).getText()+"、"); } driver.close(); } privatevoidinjectjQueryIfNeeded(){ if(!jQueryLoaded()) injectjQuery(); } //判断是已加载jQuery publicBooleanjQueryLoaded(){ Booleanloaded; try{ loaded=(Boolean)jse.executeScript("return"+"jQuery()!=null"); }catch(WebDriverExceptione){ loaded=false; } returnloaded; } //通过注入jQuery publicvoidinjectjQuery(){ jse.executeScript("varheadID=" +"document.getElementsByTagName(\"head\")[0];" +"varnewScript=document.createElement('script');" +"newScript.type='text/javascript';"+"newScript.src=" +"'http://ajax.googleapis.com/ajax/" +"libs/jquery/1.7.2/jquery.min.js';" +"headID.appendChild(newScript);"); } } |