当前位置: 首页 > 知识库问答 >
问题:

Selenium Webdriver:使用相对于其他元素的路径进行页面工厂初始化?

姬向明
2023-03-14

我试图写一个页面对象在Selenium Web驱动程序使用页面工厂@FindBy注释。page对象用于侧边栏,包含page对象需要与之交互的所有元素的父WebElement通过以下方式初始化:

@FindBy (xpath = "//div[contains(@class,'yui3-accordion-panel-content') and child::div[.='Sidebar']]")
WebElement sidebar;

然后我想要相对于这个侧边栏元素的搜索输入。有没有办法引用侧边栏元素?我可以复制并粘贴整个路径到开始:

@FindBy (xpath = "//div[contains(@class,'yui3-accordion-panel-content') and child::div[.='Sidebar']]//input[@id='search']")

但我更愿意让它相对于第一个元素。这样做可能吗?

@FindBy (parent = "sidebar", xpath = ".//input[@id='search']")

@FindBy注释上的Selenium留档有点欠缺...

共有2个答案

孔礼骞
2023-03-14

不,这样是不可能的。但您可以使用getter方法,而不是基于注释的初始化:

public class SomePage {
    @FindBy (xpath = "//div[contains(@class,'yui3-accordion-panel-content') and   child::div[.='Sidebar']]")
    private WebElement sidebar;

    private WebElement getSomeChildElement() {
        return siderbar.findElement(By.id("somechild"));
    }
}
贺懿轩
2023-03-14

答案是实现一个ElementLocatorFactory,它允许您提供搜索上下文(也就是说,驱动程序或WebElement)。

public class SearchContextElementLocatorFactory
        implements ElementLocatorFactory {

    private final SearchContext context;

    public SearchContextElementLocatorFactory(SearchContext context) {
        this.context = context;
    }

    @Override
    public ElementLocator createLocator(Field field) {
        return new DefaultElementLocator(context, field);
    }
}

然后,在实例化页面对象时,使用此定位器工厂。

WebElement parent = driver.findElement(By.xpath("//div[contains(@class,'yui3-accordion-panel-content') and child::div[.='Sidebar']]"));
SearchContextElementLocatorFactory elementLocatorFactory = new SearchContextElementLocatorFactory(parent);
PageFactory.initElements(elementLocatorFactory, this);

现在,您的@FindBy注释将与父项相关。例如,要获取主侧栏WebElement

@FindBy(xpath = ".")
WebElement sideBar;

 类似资料:
  • 问题内容: 我正在尝试使用页面工厂注释在Selenium Webdriver中编写页面对象。该页面对象用于边栏,并且以这种方式初始化了包含该页面对象需要与之交互的所有元素的父WebElement: 然后,我想要相对于此元素的搜索输入。有没有办法做这个参考元素?我可以将整个路径复制并粘贴到开头: 但是我宁愿使它相对于第一个元素。这样有可能吗? 在对@FindBy注释selenium文档是有点欠缺..

  • 在XSL analyze-string->Matching-Substring into multiple variables中,它已经 但我的问题是如何在示例中使用它来连接regex-group(1)和regex路径“/fault/informations/restriction2”之外的其他元素。 所以简单地输入XML: 和输出在一个元素中 无法将项类型与所需类型匹配错误位置:xsl:styl

  • 我有一个搜索结果页面,其中包含许多作为搜索结果产生的产品项。我可以得到产品项目的清单。但是有产品细节,如价格、折扣、运输价格,作为子元素在这些网络中。如何使用页面对象工厂模型通过使用@FindBy注释自动获取这些子元素的值。 目前,我不知道如何通过在findElement(by)函数中显式提供父WebElement的上下文而不是POF的自动机制来显式地获得它们。问题是如何使上下文成为PageObj

  • 本文向大家介绍Linux 相对路径和绝对路径的使用,包括了Linux 相对路径和绝对路径的使用的使用技巧和注意事项,需要的朋友参考一下 01. 概述 绝对路径和相对路径在shell环境中经常遇到,各有用处。有时候相对路径比较方便,有时候绝对路径比较方便。 02. 绝对路径(Absolute Pathname) 绝对路径必定由**/**开头 绝对路径是为档案/文件的所在位置做指向 在任何时候,都可以

  • 问题内容: 我正在尝试使用HTML和CSS创建水平100%堆叠的条形图。我想根据背景颜色和百分比宽度创建条形,具体取决于要绘制的值。我还希望有一条网格线来标记沿图的任意位置。 在实验中,我已经通过指定CSS属性来将条形图水平堆叠。但是,我想避免这种情况,因为它确实以混乱的方式使布局混乱。此外,当条形图浮动时,网格线似乎不太好用。 我认为CSS定位应该可以处理此问题,但我还不知道该怎么做。我希望能够

  • 问题内容: 我将iText用于PDF生成,并使用以下代码创建锚点: 该对象类型的并且是通往我想要的链接文件。 当我尝试使用相对路径时,链接不起作用。例如,虽然工作正常,但是当我尝试相对路径(例如未形成链接)时,尽管我的PDF文档和XML文件都位于名为的同一文件夹中。 问题答案: 如果您遇到这种情况: 而且,如果您在中创建了一个路径作为参考,那么您将告诉PDF可以在以下位置找到xml文件: 我看到两