listlelelement=driver.findelements(按.tagname(“a”));
在上面的例子中,driver.findelements将返回webelement的列表,现在我们有了list的对象“lelement”,现在假设如果我想得到第一个元素,我可以使用下面的代码lelement.get(0);
但我怀疑get()方法存在于list接口中,所以我应该创建arraylist或linkedlist的对象来实现这个方法..但是在上面的情况下,我可以直接得到get方法的结果,而不需要从arraylist或linked list实现,直接从接口实现..有人能解释一下吗?
1条答案
按热度按时间0mkxixxg1#
这个问题与 selenium 无关,在oop中是一个称为多态性的概念。
这个
List
接口提供抽象方法和实现List
应该为抽象方法提供一个实现体。因此方法get()
在List
接口在类中实现ArrayList
以及List
接口。ArrayList
是一种List
,因此我们可以得到这样的结果:现在假设我想创建api
findElements
对于 selenium 。如果我创建如下方法:它将与arraylist紧密耦合,每个人都必须从头开始使用arraylist才能使用该api的方法,这是不可取的。
更好的解决方案是使用一些抽象概念来表示
ArrayList
,结果是List
接口。这个比较灵活,怎么样?假设在发布应用程序之后,我们推断arraylist的实现并不是我们用于该用例的最佳选择,我们希望使用linkedlist。使用第一种编写api的方法,api的使用者也必须从自己的Angular 进行更改。使用更好的方法,他们不需要做任何事情:)
列表仍然是arraylist的一个示例;在提供的示例中。selenium肯定实现了类似的功能。当我们调用
findElements
,只是我们不知道我们得到了什么实现类,但是我们知道它为列表接口中的抽象方法提供了实现体,我们可以使用它们。