1
我是一個Ruby和硒的webdriver菜鳥所有網頁元素...發現使用Ruby和硒
不是一次抓住一個元素,並把它變成一個變量,我想抓住所有的網頁元素一次,這包括按鈕,字段等
我試着從網上抓取find_elements的例子,但它不工作,所以我做錯了什麼。
那麼,我需要做什麼來抓取網頁的所有元素,然後如何使用特定的元素?
感謝, 斯科特
我是一個Ruby和硒的webdriver菜鳥所有網頁元素...發現使用Ruby和硒
不是一次抓住一個元素,並把它變成一個變量,我想抓住所有的網頁元素一次,這包括按鈕,字段等
我試着從網上抓取find_elements的例子,但它不工作,所以我做錯了什麼。
那麼,我需要做什麼來抓取網頁的所有元素,然後如何使用特定的元素?
感謝, 斯科特
請原諒我的紅寶石的無知有場裝飾或使用某種方式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;
}
.
.
.
}
爲什麼你需要這樣做?你可以創建一個xpath或者css選擇器來一次獲取你想要的所有元素並將它們存儲在一個數組中,但我認爲這不是一個很好的做法。只需在需要時獲取所需的任何元素。 –
那麼,你想模擬一個類似'QTP'類型工具的'Object spy'的東西嗎? – Bala
這是非常糟糕的做法,並不是一個簡單的方法來做到這一點。自動化的典型方法是一次完成一個元素。 – sircapsalot