在使用 Selenium webdriver 时,为啥我们使用链表来收集具有多个匹配项的链接或下拉内容?
Posted
技术标签:
【中文标题】在使用 Selenium webdriver 时,为啥我们使用链表来收集具有多个匹配项的链接或下拉内容?【英文标题】:While working with Selenium webdriver, why do we use linked list for gathering links or dropdown contents with mutliple matches?在使用 Selenium webdriver 时,为什么我们使用链表来收集具有多个匹配项的链接或下拉内容? 【发布时间】:2016-05-17 15:16:05 【问题描述】:示例代码是这样的,(这是最近问我的一个面试问题)
列出链接元素 = driver.findElements(By.tagName("a"));
【问题讨论】:
【参考方案1】:List 表示对象的有序列表,这意味着您可以按特定顺序访问 List 的元素,也可以通过索引访问。您还可以将同一元素多次添加到列表中。 List 允许 null 元素,并且您可以在 List 中有许多 null 对象
您将按特定顺序一一获得所有结果。它还允许您添加重复项。我们的结果可以有重复,这主要是我们在自动化中需要的,但是如果您的要求不同并且您不需要重复,那么您可以使用其他集合类型。如果您使用 set,那么它将不允许重复,并且它是对象的无序表示。
我们使用 List 是因为当我们使用 findElements()
而不是 findElement()
时,我们预计定位器将返回超过 1 个元素(并非在每种情况下或场景中)。因此使用 List 是一个很好的做法,这样我们的数据就会以有序的方式保存在 list 中,以便我们可以正确使用它们。
通常我以以下方式使用列表:-
List<WebElement> allOptions = dropDown.findElements(By."OUR Locator");
for ( WebElement we: allOptions)
dropDown.sendKeys( Keys.DOWN ); //simulate visual movement
sleep(250);
if ( we.getText().contains( text ) ) select.selectByVisibleText("Value1");
您也可以通过多种方式做到这一点:-
https://sqa.stackexchange.com/questions/8029/how-to-iterate-a-list-of-webelements-and-print-the-values-one-by-one-to-perform
这里有更详细的版本,可以帮助您确定何时使用列表:-
http://java67.blogspot.in/2013/01/difference-between-set-list-and-map-in-java.html
添加和访问元素
要向 List 添加元素,请调用它的 add() 方法。该方法继承自 Collection 接口。以下是几个例子:
List listA = new ArrayList();
listA.add("element 1");
listA.add("element 2");
listA.add("element 3");
您可以通过以下索引访问它们:-
String element0 = listA.get(0);
String element1 = listA.get(1);
String element3 = listA.get(2);
System.out.println(element0+" "+element1+" "+element3
);
希望对你有帮助:)
【讨论】:
谢谢@user2014 .. 这是我的荣幸 :)【参考方案2】:我想说,通过List
,您可以动态添加、访问和删除相同类型的对象。此外,即使它没有内容也不会介意。
通常您根据需要选择数据结构。在这里,在进行findElements()
搜索时,我们说我们想要 DOM 中具有给定结构的所有元素,并且我们不能总是提前确定它的大小。在这种情况下使用固定大小的数组没有多大意义。
希望对你有帮助:)
【讨论】:
感谢您的回答 Prateek。以上是关于在使用 Selenium webdriver 时,为啥我们使用链表来收集具有多个匹配项的链接或下拉内容?的主要内容,如果未能解决你的问题,请参考以下文章
在使用 python 检索 selenium webdriver 元素文本时需要帮助
通过 Selenium 中的 webdriver 传递用户代理
Selenium Webdriver - 设置首选浏览器语言DE
在 Java、Maven 和 Windows 10 中使用 Selenium Chrome Webdriver 时出错 - 访问被拒绝