我是Ruby和Selenium Webdriver noob ......
我不是一次抓取一个元素并将其放入变量中,而是希望一次抓取所有的网页元素,包括按钮,字段等。
我试过从网上抓取find_elements的例子,但它没有用,所以我做错了。
那么我需要做些什么才能获取网页的所有元素,然后如何使用特定的元素呢?
谢谢, 斯科特
答案 0 :(得分:0)
原谅我对拥有字段装饰器的Ruby的无知或某种方式在Java中使用PageFactory。有几篇关于使用Page Object Model和PageFactory的great articles和博客文章。它可能不是你正在寻找的东西,但也许Ruby有类似的东西。
PageFactory的要点基本上是,为您的页面创建一个类,并为具有id或name属性的元素添加WebElement字段。对变量名使用相同的id / name值。您还可以使用字段装饰器来传递FindBy。然后在构造函数中调用PageFactory.init(factory,object),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;
}
.
.
.
}