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

如何使用FindBy和PageFactory机制为Selenium web元素指定多个定位器

冯永长
2023-03-14

我喜欢在我的自动化框架中使用带有FindBy注释的PageFactory来自动定位我的页面对象类中的元素。

我有一个WebElement,我需要能够指定几个不同的定位器。我以为FindBys是我的解决方案,但显然这不是它的工作方式。它相当于Driver.FindElement(option1).FindElement.(option2)。那不是我需要的。我需要的东西,将找到一个元素的一个或其他定位器。如果一个不起作用,那么使用另一个定位器。在Selenium中有没有使用FindBy注释实现这一点的方法?

共有1个答案

郜修雅
2023-03-14

Selenium在今年5月有一个新特性--@findall注释,它完全符合我的需要;

http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/support/findall.html http://selenium.10932.n7.nabble.com/pull-request-62-add-a-findall-annotation-to-the-java-page-factory-td24814.html

 类似资料:
  • 我正在尝试将我的selenium测试转换为使用页面对象模型(以及扩展为@FindBy)。我有几个这样的对象定义: 将父对象转换为使用FindBy很容易: 基本上,如果可能的话,我想这样做(我知道这不是真正的代码,这只是一个伪示例: 但是,有没有一种方法可以使用FindBy在父元素中定位子元素呢 。我需要这样做,因为我的目标是页面上的特定元素,这些元素可能与页面上的其他元素共享相同的名称或类名。谢谢

  • 对于下面的Page对象示例类,我有一个accountsLink私有成员,它在加载时映射到登录页面上的非动态元素。当从构造函数调用initElements方法时,使用FindBy批注对其进行初始化。 现在问题来了。我有另一个元素(signInButton),它只在您单击accountsLink元素时才动态加载。此操作不会将您带到另一个页面,而只会打开一个ajax菜单,其中会出现登录按钮。 我的问题是

  • 我在一个使用Selenium和C#的自动化项目中工作。我使用Page Object模式定义每个页面(带有它们的定位器),然后在一个测试类中分别定义测试。我有一个Page类,它是页面的基类,我在其中调用:PageFactory.initElements(webDriver,this); 并定义所有页面的通用方法。然后每个页面从page继承,并使用@findby注释定义相应的元素: 添加了一个新的登录

  • 我试图找到以下元素: 使用selenium webdriver。但我得到的信息是: 消息:没有这样的元素:无法定位元素:{"方法":"xpath","选择器":"//div[@id='terms-modal']/div//[@id='接受条款']//[@onClick="close_terms_window();"]"} (会话信息: chrome=74.0.3729.131)(驱动程序信息: c

  • 我正在尝试为以下内容定位元素: 我尝试了XPath和CssSelector,但它无法定位元素。有人能帮我找到元素TIA吗

  • 我正在测试一个仍在开发中的网站。 元素的id、类、文本或在DOM中的位置通常会改变。然后我使用的定位器将无法再找到元素。 但是这些功能仍然正常运行。我不希望几个测试在没有实际回归的情况下失败。 因此,我没有为每个元素使用一个定位器,而是使用了一组定位器。 我查找元素的方法如下所示: 它尝试查找集合中具有第一个定位器的元素,只有在失败时,才尝试下一个定位器。 集合是一个(顺序由插入顺序定义),这意味