2012-04-05 51 views
0

我是硒的新手。硒測試遞歸定位元素很慢

我試圖遍歷網頁上的下拉框中的所有元素與很多子元素。我這樣做是爲了獲得select標籤中所有選項的所有href屬性。 我正在使用Xpath表達式查找元素。

我使用Selenium WebDriver以及FireFox瀏覽器。結果是我所期望的,但測試非常緩慢。

如果有什麼方法可以通過使用任何替代方法使測試更快?

我正在使用的代碼 -

private void captureElements(String xpath) 
{ 

    List<WebElement> list=null; 

    if((list=driver.findElements(By.xpath(xpath)))!=null){ 

     int length = list.size(); int i=length; 

     while(i>0){ 

      WebElement ele = list.get(length-i); 
      Actions builder = new Actions(driver); 
      builder.moveToElement(ele).build().perform(); 

      LogElementToExcel(ele); 

      int index = length-i+1; 
      String newxpath = xpath.replace("/a", "["+index+"]/ul/li/a"); 
      captureElements(newxpath); 
      i--; 
     } 
    } 
} 
+0

也許使用一個XPath獲取由所有選項組成的節點集,而不是每個選項的一個XPath? – minopret 2012-04-05 07:06:56

+0

你可以發佈你的源?我喜歡cssSelector over xpath。此外,您可以從下拉列表中選擇所有選項,而不使用cssSelector或xpath,並使用'Select select = new Select(webElement);列表 options = select.getOptions()'。代碼是java。你使用哪種語言? – Tarken 2012-04-05 07:44:49

回答

0

您正在使用本機xpath引擎的firefox中運行測試。所以很難說出爲什麼你的測試很慢,除非你提供代碼。 Xpath在IE中很慢,因爲IE沒有本地xpath引擎,但在這一點上似乎不是你的問題。

我在下面考慮會比你的xpath解決方案更快。試一試。

WebElement element = driver.findElement(By.id("idOfMySelectBox")); 
Select select = new Select(element); 
List<WebElement> options = select.getOptions(); 
for(WebElement option:options){ 
    System.out.println(option.getAttribute("href")); 
} 
0

參見:Selenium 2.0 IE Xpath Performance

鑑於你的情況,我想你會過得更好加載頁面源到像HtmlAgilityPack圖書館和解析它是方式 - 你會看到巨大的性能提升。對於C#以外的語言,請看here

0

自動化與任何GUI工具如硒緩慢,啓動瀏覽器代理是一個緩慢的過程,完整的所有GUI元素的顯示也是一個緩慢的過程。如果速度是一個因素不要忘記,你可以用無頭工具做同樣全面的測試。執行時間可以減少多達40%。一旦我使用過的工具是JWebUnit。試試它的速度。