如何在Selenium WebDriver中获取“ul”类的所有“li”元素 - 特定于PageFactory

时间:2017-08-02 12:34:02

标签: selenium selenium-webdriver webdriver

<div class="col-md-3 col-sm-3">
    <h4>Free Resources</h4>
    <ul>
        <li>
            <a href="/ncert-solutions/ncert-solutions-class-10-maths">NCERT Solutions for Class 10 Maths</a>
        </li>
        <li>
            <a href="/ncert-solutions/ncert-solutions-class-9-maths">NCERT Solutions for Class 9 Maths</a>
        </li>
        <li>
            <a href="/ncert-solutions/ncert-solutions-class-10-science">NCERT Solutions for Class 10 Science</a>
        </li>
        <li>
            <a href="/ncert-solutions/ncert-solutions-class-9-science">NCERT Solutions for Class 9 Science</a>
        </li>
        <!-- CBSE Previous Year Paper -->
        <li>
            <a href="/contents/question-solutions">CBSE Previous Year Paper</a>
        </li>
        <!-- RD Sharma solutions-->
        <li>
            <a href="/rd-sharma-solutions/rd-sharma-class-10-solutions">RD Sharma Class 10 Solutions</a>
        </li>
        <!-- Tutors SEO Pages-->
        <li>
            <a href="/tutors/home-tuition-teacher">Home Tuition</a>
        </li>
        <li>
            <a href="/tutors/maths-tuition-teacher">Math Teacher</a>
        </li>
        <li>
            <a href="/tutors/science-tuition-teacher">Science Teacher</a>
        </li>
    </ul>             
</div>

我已粘贴了我正在使用的HTML。为了使事情更清楚,在class name = 'col-md-3 col-sm-3'的同一层次结构中还存在两个div标签。

我发现这个问题很有用(How to get all "li" elements of "ul" class in Selenium WebDriver),但我想知道如何使用PageFactory做同样的事情?

请在这里帮助我。我想我将找到列表<div>元素的根(使用@FindBy注释)并为每个<a>标记执行循环,并从Element存储库类返回此列表网页。有一个更好的方法吗?我特别想要这个版本的PageFactory。

1 个答案:

答案 0 :(得分:1)

您可以使用@FindBys

@FindBys(xpath)
List<WebElement> elements;

例如,如果在UL标记下有元素列表。然后您的xpath将为//ul/li/a,您可以在页面工厂中使用它,如下所示。

@FindBys(xpath="//ul/li/a")
public List<WebElement> elements;

您可以在脚本或方法中调用它,我认为元素在主页上,

Home homePage = new HomePage(driver);
PageFactory.initElements(driver, homePage);
homePage.elements.get(0).click //to click on first element

或迭代所有元素并获取下面给出的值。

for(WebElement element:elements)
   sop(element.getText();