2017-09-07 101 views
0

多类元素如果我用这个代码:无法找到指定的

@FindBy(how = How.XPATH, using= ".//*[@class='leaflet-control-pan leaflet-control']") 
private WebElement movingPageButtonsLocator; 

元素movingPageButtonsLocator被发现,但如果我用下面的代码它并不:

@FindBy(how = How.CLASS_NAME, using= "leaflet-control-pan leaflet-control") 
private WebElement movingPageButtonsLocator; 

AREN”两个都一样吗?

如果不是,在这种情况下How.XPATHHow.CLASS_NAME有什么不同?

+0

做他们是不一样的,一个是'XPATH'任何'XPATH'查询匹配,另一个是别的东西,没有在文档中则在那里这表明它们在任何方面都是平等的。 –

回答

0

,如果你会看仔细how = How.CLASS_NAME类名而不是类名。看单数还是复数。

所以How.CLASS_NAME应该仅在单个类可以识别元素时使用。

以下将工作,不知道它是否会给你一个你感兴趣的元素或不。

@FindBy(how = How.CLASS_NAME, using= "leaflet-control-pan") 
private WebElement movingPageButtonsLocator; 
1
@FindBy(how = How.XPATH, using= ".//*[@class='leaflet-control-pan leaflet-control']") 
private WebElement movingPageButtonsLocator; 

将匹配任何XPATH查询,它可以是任何页面上。其中className是元素上的单个类,如果要匹配元素上的多个类,则需要使用@FindBys

根据的JavaDoc,这是应该的:

@FindBys({@FindBy(how = How.CLASS_NAME, using= "leaflet-control-pan"), 
      @FindBy(how = How.CLASS_NAME, using= "leaflet-control") }) 
private WebElement movingPageButtonsLocator; 

或更简洁:

@FindBys({@FindBy(className = "leaflet-control-pan"), 
      @FindBy(className = "leaflet-control") }) 
private WebElement movingPageButtonsLocator; 

@FindBys是一个逻辑AND它只能找到其中两个class上一个element我认为它应该被称为@FindByAll是语义正确

用来标记在一个页面对象的字段来指示查找链中的应 使用一系列@FindBy标签作为ByChained

描述

@FindAll是合乎逻辑的OR它发现其中任何指定标准匹配element我认为它应该被称为@FindByAny是语义正确

用来标记在一个页面对象的字段来指示查询应 使用一系列@FindBy标签,然后它会搜索所有元素 匹配任何FindBy条件。请注意,元素不是 保证以文档顺序。

1

这可以通过使用CSS选择器

@FindBy(how = How.CSS, using= ".leaflet-control-pan.leaflet-control") 
相关问题