Selenium webdriver @通过注释查找从按钮列表中查找一个单选项的用法

Selenium webdriver @通过注释查找从按钮列表中查找一个单选项的用法,selenium-webdriver,pageobjects,findby,Selenium Webdriver,Pageobjects,Findby,我在使用@FindBy注释从按钮列表中查找一个单选按钮时遇到问题 我有一个与Mr.Ms.的标题选项web元素。。Dr作为一个单选按钮,因为它们位于同一个div中,所以除了结束索引器之外,它们的xpath或id几乎相同, 我不想每个标题的对应选项都有6个@FindBy 我正在寻找的解决方案是在使用cucumber特性文件时使用一个步骤 鉴于我是“先生” 鉴于我是“女士” 它将转到页面对象和@FindBy(………)WebElement标题 title.click//annotation将单击相应的

我在使用@FindBy注释从按钮列表中查找一个单选按钮时遇到问题

我有一个与Mr.Ms.的标题选项web元素。。Dr作为一个单选按钮,因为它们位于同一个div中,所以除了结束索引器之外,它们的xpath或id几乎相同, 我不想每个标题的对应选项都有6个@FindBy

我正在寻找的解决方案是在使用cucumber特性文件时使用一个步骤

鉴于我是“先生” 鉴于我是“女士”

它将转到页面对象和@FindBy(………)WebElement标题


title.click//annotation将单击相应的标题

如果要创建动态@FindBy,则不可能,您可以使用动态By locator,或者在该By locator中使用字符串元素,但您为FindBy批注提供的内容必须是不可变的。因此,如果使用FindBy,您应该确切地知道您在寻找什么

如果没有页面源代码示例,很难判断如何访问单选按钮本身,但是使用xpath可以很容易地实现这一点,因为您的单选按钮很可能已经设置了名称甚至ID,最后您可以在元素中搜索文本。 e、 g:


我同意你的看法@FIndBy在单选按钮方面不是很有效。请提供实际的html作为示例,以便我们为您提供帮助。单击titleOptions(字符串标题){titleIndex=LocatorIndexes.getTitleIndex(标题);driver.findElement(By.cssSelector(“#content>div:nth child(4)>div>div.paration.nomargin>div:nth child(1)>div.imageRadioInput>ul>li:nth child(”+titleIndex+”)>label”)。单击();其中“+titleIndex+”索引具有赋值,具体取决于“从过去开始”功能的标题,但它不干净,并且在我的建议中,索引定位器中的“如果”语句可能是实际页面中的
html
better@FindBy(.......)Webelement titleoption;
我想简化为
clickTitleOption(字符串标题){
titleoption.clickI将接受@Kudin的答案。这应该是一个方法
"//input[@id='btnId']"   (in case of present id I would suggest using css selector "input#btnId")
"//label[contains(text(), 'Mr')]/input"