2014-04-14 35 views
1

我是一個Ruby和硒的webdriver菜鳥所有網頁元素...發現使用Ruby和硒

不是一次抓住一個元素,並把它變成一個變量,我想抓住所有的網頁元素一次,這包括按鈕,字段等

我試着從網上抓取find_elements的例子,但它不工作,所以我做錯了什麼。

那麼,我需要做什麼來抓取網頁的所有元素,然後如何使用特定的元素?

感謝, 斯科特

+2

爲什麼你需要這樣做?你可以創建一個xpath或者css選擇器來一次獲取你想要的所有元素並將它們存儲在一個數組中,但我認爲這不是一個很好的做法。只需在需要時獲取所需的任何元素。 –

+0

那麼,你想模擬一個類似'QTP'類型工具的'Object spy'的東西嗎? – Bala

+0

這是非常糟糕的做法,並不是一個簡單的方法來做到這一點。自動化的典型方法是一次完成一個元素。 – sircapsalot

回答

0

請原諒我的紅寶石的無知有場裝飾或使用某種方式PageFactory像Java中。有幾個​​和關於使用頁面對象模型和PageFactory的博客文章。它可能不是你正在尋找的,但也許Ruby有類似的東西。

PageFactory的基本要點是爲您的頁面創建一個類,併爲具有id或name屬性的元素添加WebElement字段。爲變量名使用相同的ID /名稱值。您也可以使用字段修飾器來傳遞FindBy。然後在構造函數中調用PageFactory.init(工廠,對象),PageFactory將查找元素或元素列表。

讓我們來看看我是否可以給出一個QAD的例子,你可以得到這個想法,然後使用POM進行研究。

public abstract class PageBase implements WrapsDriver{ 

    protected String URL; 
    protected String title; 
    protected WebDriver driver; 
    protected ElementLocatorFactory factory; 



    public PageBase(WebDriver driver, String pageTitle){ 
     this.driver = driver; 
     this.title = pageTitle; 
     this.factory = new AjaxElementLocatorFactory(driver, 2); 
    } 

    abstract void open(); 
... 

} 

public class SomePage extends PageBase{ 
/* 
*<div id="thin_client_viewer" style="position: relative"> 
*/ 
    public WebElement thin_client_viewer; 
    public WebElement primaryContentLink; //<a id="primaryContentLink" style="display:none" href=""></a> 
    public WebElement loadingSpinner; //hidden <div id="loadingSpinner" style="display: none;"> 
    public WebElement top_toolbar; 
    . 
    . 
    . 

你可以聲明列表並使用自定義裝飾太:

. 
    . 
    . 

    /* 
    * <div id="dijit_layout_LayoutContainer_0" class="dijitContainer dijitLayoutContainer  dijitAlignClient" > 
    * 
    */ 
    @FindBy(css="div[id^=\"dijit_layout_LayoutContainer_\"") 
    public List<WebElement> dijit_layout_LayoutContainer_; 
    /* 
    * <span id="TabbedNavigation_tab_0" class="tabLabel" dojoattachpoint="containerNode,focusNode" > 
    * 

    */ 

    @FindAll(value = { @FindBy(className="tabLabel") }) 
    public List<WebElement> tableauTabbedNavigation_tab_; 


... 

public SomePage(WebDriver driver){ 

     super(driver, "Page Title"); 
     URL = driver.getCurrentUrl(); 

    } 
@Override 
public void open(){ 

    . 
    . 
    . 
    PageFactory.initElements(super.factory, this); 
    . 
    . 
    . 
    } 

    . 
    . 
    . 

}

實例化或創建此頁面調用open()類;

public class LoginPage extends PageBase{ 

     private WebElement somepage_link; 
     . 
     . 
     . 
     public SomePage clickLinkToSomePage(){ 

      . 
      . 
      . 

      driver.get(somepage_link.getAttribute("href")); 
      somepage_link.click(); 
      SomePage page = new SomePage(super.getWrappedDriver()); 
      page.open(); 
      return page; 
     } 
    . 
    . 
    . 

}