当前位置: 首页 > 知识库问答 >
问题:

Selenium Webdriver w/Java:使用一个命令定位具有多个类名的元素

陆安国
2023-03-14

我正在尝试使用Selenium (2.31.0,使用JavaSE 1.6和IE9)来查找一个页面上的一系列元素。这些元素都有两个类名,“dataLabel”或“dataLabelWide”。目前,我的代码在两个单独的ArrayLists中收集这些元素,每个类名一个,然后将它们转换成数组,并组合成一个数组。然而,这个方法列出的元素是无序的,我需要它们保持在页面的HTML源代码中相同的顺序。

我的代码的上述部分看起来像这样(添加了注释以便解释):

// Application runs on WebDriver d, an InternetExplorerDriver.
// After navigating to the page in question...

List<WebElement> labels = d.findElements(By.className("dataLabel"));
List<WebElement> wLabels = d.findElements(By.className("dataLabelWide"));
// Locates the elements of either type by their respective class name.

WebElement[] labelsArray = labels.toArray(new WebElement[labels.size()]);
WebElement[] wLabelsArray = wLabels.toArray(new WebElement[wLabels.size()]);
// Converts each ArrayList to an array.

List<WebElement> allLabels = new ArrayList<WebElement>();
// Creates an ArrayList to hold all elements from both arrays.

for(int a = 0; a < labelsArray.length; a++) {
    allLabels.add(labelsArray[a]);
}
for(int b = 0; b < wLabelsArray.length; b++) {
    allLabels.add(wLabelsArray[b]);
}
// Adds elements of both arrays to unified ArrayList, one by one.

WebElement[] allLabelsArray = allLabels.toArray(new WebElement[allLabels.size()]);
// Finally converts unified ArrayList into array usable for test purposes.
// Far too complicated (obviously), and elements end up out-of-order in array.

我认为最有效的解决方案是找到具有任一类名的元素,以便它们立即包含在单个列表/数组中。我自己做了一些搜索,但我没有找到任何关于如何管理此任务的结论性想法。如果有什么方法可以做到这一点,请告诉我。

共有1个答案

孟鹤龄
2023-03-14

你为什么不做以下事情:

driver.findElement(By.cssSelector(".dataLabel,.dataLabelWide");

“.”选择器说,“给我这个类的所有元素。”“,”运算符是CSS选择器“or”运算符。

 类似资料:
  • 问题内容: 我正在尝试使用Selenium(2.31.0,使用JavaSE 1.6和IE9)在页面上查找一系列元素。这些元素都具有两个类名之一,即“ dataLabel”或“ dataLabelWide”。当前,我的代码将这些元素收集在两个单独的ArrayList中,每个类名一个,然后将它们转换为数组并将它们组合为一个数组。但是,此方法无序列出了元素,我需要将它们按在页面HTML源代码中找到的相同

  • 我使用SpringBoot创建了一个SOAP Web服务服务器,并且我能够成功创建一个endpoint。但是,我无法创建多个endpoint并使用不同的URL访问它们。我想通过URL来访问处理该过程。 每个endpoint接收到的SOAP消息具有相同的模式。(命名空间和localpart是相同的!!!)我不想公开WSDL。 例如。 userA向以下URL发送以下SOAP消息:http://soap

  • 我尝试单击以下元素,类名等于<code>“clean right”: 如何使用<code>驱动程序定位它。find_element_by_class_name()

  • 我已经创建了一个类似上面的类,我希望能够使用相同的类使用'colour'作为这个类的替代,如下面。 有没有一种方法可以简单地创造出来?

  • 我正在寻找一种解决方案,来解决需要按顺序一个接一个地执行的命令集。同样,只有在前一个命令完成执行后,才能执行一个命令。 我试着用“;”执行命令对于每个命令,但所有命令都在一次尝试中执行。所以,它不起作用。在同一个shell/exec中运行每个命令的可能方法是什么。

  • 我对pytest的一个命令行参数没有问题。 运行程序时: 我得到了预期的回应: 当我尝试多个参数时,我会遇到问题 _____________________________________设置测试应答器2时出错/usr/local/penguin/home/px09/p001/test-suite.py,第9行def测试应答器2(cmdopt2):未找到E夹具“cmdopt2” /usr/loca