为啥我们在 selenium webdriver 中需要番石榴?

Posted

技术标签:

【中文标题】为啥我们在 selenium webdriver 中需要番石榴?【英文标题】:Why we need guava in selenium webdriver?为什么我们在 selenium webdriver 中需要番石榴? 【发布时间】:2020-04-25 01:41:52 【问题描述】:

我用 maven 创建了 selenium web 驱动程序项目。 我在某处读到我们需要添加番石榴依赖项。

任何人都知道为什么我们需要使用 selenium 的番石榴依赖吗?

【问题讨论】:

【参考方案1】:

番石榴

Guava 是由 Google 开发的基于 Java 的开源库。它有助于开发人员和测试自动化工程师采用最佳编码实践,并有助于减少编码错误。它为集合、缓存、原语支持、并发、通用注释、字符串处理、I/O 和验证提供实用方法。


Maven 依赖

Selenium v​​3.141.59 客户端开始,Maven 依赖项 为:

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>25.0-jre</version>
</dependency>

tl;博士

您可以在以下位置找到一些相关讨论:

Incompatible library version selenium / guava org.openqa.selenium.remote.service.DriverService$Builder.createArgs()Lcom/google/common/collect/ImmutableList; with Selenium 3.5.3 Chrome 76 java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;I)V with IE and Selenium through Java Exception in thread “main” java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState(ZLjava/lang/String;Ljava/lang/Object;)

【讨论】:

【参考方案2】:

这是我能安排的最好的信息。

总结答案:

SeleniumFunction and Predicates 使用 Guava 库。

以上引用的参考(第 126 页):

https://books.google.de/books?id=PMNiDwAAQBAJ&pg=PA126&lpg=PA126&dq=selenium+and+guava&source=bl&ots=hxRq2Dq61Y&sig=ACfU3U3ro_HhI4cpejvSSSEvWYZMF99l9g&hl=en&sa=X&ved=2ahUKEwiO7oOP6PHmAhUCCewKHfnJDSs4ChDoATABegQIChAB#v=onepage&q&f=false

函数和谓词的简要介绍以及 Selenium 中使用的示例:

Guava 提供了两个基本的“函数式”接口:

Function,具有单一方法B apply(A input)。 Function 的实例通常被认为是可引用的 透明——没有副作用——并且与equals一致, 也就是说,a.equals(b) 意味着 function.apply(a).equals(function.apply(b))

示例:

public WebElement apply(WebDriver driver) 
            return driver.findElement(locator);
        

here你也可以查。主要用于 Selenium Waits(隐式除外)。

谓词,具有单一方法 boolean apply(T input)。 Predicate 的实例通常被认为是无副作用的 并且与equals一致。

示例:

selenium filter with Predicate

here你可以在Guava官方文档中找到Function and Predicates的详细信息

希望对你有帮助。

【讨论】:

优秀的答案!谢谢,这刚刚解决了我连续大约 8 小时遇到的一个问题。这样一个简单的修复也 谢谢@AlexanderDunn。我很高兴这个答案有助于解决您的问题。

以上是关于为啥我们在 selenium webdriver 中需要番石榴?的主要内容,如果未能解决你的问题,请参考以下文章

为啥拖放在 Selenium Webdriver 中不起作用?

为啥 switch_to_window() 方法不适用于 Python 中的 selenium webdriver?

webdriver 对xpath 支持的怎么样,为啥我在selenium中用xpat能定位到,用driver却定位不到?

关于selenium webdriver chromedriver下载的问题

关于selenium webdriver chromedriver下载的问题

webdriver firefox为啥之后不进行跳转