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

如何通过Selenium识别特定的Page Object片段成员元素

廖臻
2023-03-14

在我们的项目中,我们使用cucumber进行了多个硒测试,测试特定的组件。其中一个组件是两个标识符,我们称之为国家标识符和站点标识符。它们具有以下HTML:

<div class="identifiers">   
    <div class="country-identifier">
        <span class="ident-label">
            Germany
        </span>
    </div>
    <div class="site-identifier">
        <span class="ident-label">
            Gaming
        </span>
    </div>
</div>

现在我们的测试有两个模型,每个标识符一个:

@PageObject(css = "div.country-identifier")
@Named("CountryIdentifier")
@ScenarioScoped
public class CountryIdentifier {

    @Inject
    @CurrentScope
    private WebElement scope;

    @FindBy(className = "ident-label")
    @CacheLookup
    private WebElement label;

}

和:

@PageObject(css = "div.site-identifier")
@Named("SiteIdentifier")
@ScenarioScoped
public class SiteIdentifier {

    @Inject
    @CurrentScope
    private WebElement scope;

    @FindBy(className = "ident-label")
    @CacheLookup
    private WebElement label;

}

现在的问题是,当我想要访问站点标识符的标签时,WebElement标签的值是Germany,而不是Gaming。这是因为获取值的css选择器显然只应用类名ident label,而没有考虑容器类。我希望生成的用于查找标签的选择器将为页面对象定义的css与@FindBy注释中的选择器相结合。有没有办法告诉web驱动程序仅在@PageObject注释的css选择器中指定的容器范围内按类名查找元素?或者我需要FindBy注释中的完整css选择器,比如:

@FindBy(css = "div.site-identifier .ident-label")

@FindBy(css = "div.country-identifier .ident-label")

共有1个答案

葛高澹
2023-03-14

看来你就快到了。可以使用以下定位器来标识相应的图元:

>

@FindBy(css = "div.country-identifier span.ident-label")

游戏

@FindBy(css = "div.site-identifier span.ident-label")

根据您询问的评论更新,只可能指定“.ident label”,并使驱动程序只在页面对象注释的css指定的容器内搜索,答案是否定的。这是因为classident label在

>

<span class="ident-label">
    Germany
</span>

游戏

<span class="ident-label">
     Gaming
</span>

因此,WebDriver实例无法区分它们,并且总是根据流行的超文本标记语言DOM选择第一个匹配项。

有两种解决方案,如下所示:

  • 最简单的方法是向家长求助

第一种方法是最好的方法,大多数情况下都会遵循。

 类似资料:
  • 问题内容: 我希望能够通过命令行命令检测计算机上安装了哪种特定的Linux风格,例如Ubuntu vs Fedora。 有人建议,但这仅报告内核版本。 问题答案: 尝试以下命令…。它对我有用… 例如,一旦知道您正在运行Red Hat,您就可以使用以下方法解决问题: 猫/ etc / redhat-release 或在Debian上: 猫/ etc / debian_version 或一般而言: 猫

  • 我想打印第二个索引值,即SUMMER。 怎么才能实现呢?

  • 我正在运行一个代码,该代码在文件夹中导航,最后到达目标并通过单击文件下载文件。 例如,要查找我正在使用的文件夹,请执行以下操作: 问题是文件夹有时写得不完全一样。例如,它有两个空格。 所以我的问题是:是否有可能通过包含特定单词的文本找到元素?例如这样的事情(我知道这是不对的,我只是想让你理解我): 我寻找答案,但没有找到我要找的。如果这是重复的,我道歉,并要求指出正确的方向。 提前谢谢! 编辑:使

  • 你知道为什么吗?

  • 从版本0.9.9-rc2开始,SphinxSE提供了一个UDF函数,允许用户通过MySQL创建摘要。这个功能的作用与API调用BuildExcerprts的功能非常相似,但可以通过MySQL+SphinxSE来访问。 提供这个UDF的二进制文件叫做sphinx.so,当安装SphinxSE本身的时候,这个文件会自动地被创建,并且安装到合适的位置。 但如果由于某种原因它没能自动安装,那就请在创建Sp

  • 当我运行此代码时: 我收到以下错误: org.openqa.selenium.InvalidSelectorException:无法计算xpath表达式'//输入[包含(@id,'name']'要留档此错误,请访问:http://seleniumhq.org/exceptions/invalid_selector_exception.html构建信息:版本:'2.20.0',修订版:'16008'