无法找到分配了多个类的元素

时间:2017-09-07 13:40:19

标签: java selenium selenium-webdriver

如果我使用此代码:

@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.XPATH在这种情况下与How.CLASS_NAME的区别如何?

3 个答案:

答案 0 :(得分: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,它只能找到{{1>}上 class的位置。 我认为应该将element称为语义正确

  

用于标记页面对象上的字段以指示应该进行查找   如ByChained

中所述,在链中使用一系列@FindBy标记

@FindAll是一个逻辑@FindByAll,它找到任何指定条件与OR匹配的位置。 我认为应该将element称为语义正确

  

用于标记页面对象上的字段以指示应该进行查找   使用一系列@FindBy标签然后它将搜索所有元素   匹配任何FindBy标准。请注意,元素不是   保证按文件顺序排列。

答案 1 :(得分:1)

这可以使用CSS Selector

完成
 @FindBy(how = How.CSS, using= ".leaflet-control-pan.leaflet-control")

答案 2 :(得分:0)

如果您仔细查看WITH TABLE_1 AS (SELECT 'ADVANCED' AS STRING_1, 'ANNA' AS STRING_2 FROM DUAL UNION SELECT 'MICROSOFT' AS STRING_1, 'MSS' AS STRING_2 FROM DUAL UNION SELECT 'MICROSOFT' AS STRING_1, 'MSOFT' AS STRING_2 FROM DUAL UNION SELECT 'MISS' AS STRING_1, 'MISS' AS STRING_2 FROM DUAL ) SELECT T1.*, REMSTR(STRING_2, STRING_1) AS RESULT FROM TABLE_1 T1 班级名称而非班级名称。见单数与复数。

只有当单个类可以识别元素时,才应使用 How.CLASS_NAME

以下工作,不确定它是否会给你一个你感兴趣的元素。

how = How.CLASS_NAME