表达式的类型必须是数组类型,但它解析为By

时间:2018-03-06 18:21:27

标签: java selenium

你好我是java的新手,Eclipse给了我一个错误:

log4j.rootLogger = INFO,fileAppender
log4j.logger.FOO=DEBUG,FOOAppender,fileAppender
log4j.additivity.FOO=false 

log4j.appender.FOOAppender = org.apache.log4j.RollingFileAppender 
log4j.appender.FOOAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.FOOAppender.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.FOOAppender.File = foo.log

log4j.appender.fileAppender=org.apache.log4j.FileAppender
log4j.appender.fileAppender.File=log.log
log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.fileAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

以下是我的代码:

The type of the expression must be an array type but it resolved to By

1 个答案:

答案 0 :(得分:4)

说明

你写了

By.xpath("//div[contains(@class,'ng-binding')]")[1]
在你的退货声明中

。也就是说,您尝试使用By#xpath像数组一样访问[1]的结果。但是,该方法不返回数组,它返回By

请参阅方法的documentation

  

返回By通过 XPath 定位元素。

解决方案

您可能打算像数组一样访问Driver.findElements的结果。但是,确切的返回类型是List<WebElement>(请参阅documentation),这不是数组。您可以像

一样访问它
return Driver.findElements(By.xpath("//div[contains(@class,'ng-binding')]")).get(1);

但是,此访问仅在有多个元素(您尝试访问第二个元素)时才有效。所以一个安全的变体是:

List<WebElement> elements = Driver.findElements(By.xpath(
    "//div[contains(@class,'ng-binding')]"));

if (elements.size() > 1) {
    return elements.get(1);
} else {
    // Do something different
}

但是我不确定这是否正是你想要的,因为你似乎返回boolean。请随意更详细地解释它,我会更新解决方案。