在使用 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 传递用户代理

Selenium Webdriver - 设置首选浏览器语言DE

在 Java、Maven 和 Windows 10 中使用 Selenium Chrome Webdriver 时出错 - 访问被拒绝

当窗口在 Chrome 87 的后台时,Webdriver.io/Selenium 测试失败