当前位置: 首页 > 面试题库 >

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

慕通
2023-03-14
问题内容

我正在尝试使用Selenium(2.31.0,使用JavaSE 1.6和IE9)在页面上查找一系列元素。这些元素都具有两个类名之一,即“
dataLabel”或“
dataLabelWide”。当前,我的代码将这些元素收集在两个单独的ArrayList中,每个类名一个,然后将它们转换为数组并将它们组合为一个数组。但是,此方法无序列出了元素,我需要将它们按在页面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.

我认为最有效的解决方案是使用任何一个类名定位元素,以便将它们立即包含在单个列表/数组中。我已经自己进行了一些搜索,但是还没有找到有关如何管理此任务的结论性想法。如果有办法可以解决,请告诉我。


问题答案:

您为什么不执行以下操作:

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

“。” 选择器说:“将此类的所有元素都给我。” “,”运算符是CSS选择器的“或”运算符。



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

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

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

  • 问题内容: 我在这里遇到一种情况,试图充当两个API之间的网关。我需要做的是: 向APIa提出请求; 将XML响应解析(编组)为java对象; 对其进行很少的更改; 然后以XML(解组)形式向另一端(APIb)做出响应。 事实是,我使用同一对象来解析API响应并将响应发送到另一端。 正如评论所说:我收到但我需要发送 有没有一种方法可以完成此操作而不必创建另一个带有ResultCode的额外类? 提

  • 问题内容: 如何在元素列表中选择某个元素?我有以下几点: 很明显,我有适用于所有类的CSS类,但是我也希望能够选择此类的第一,第二或第三div , 而不管它们在标记中的位置 : 几乎类似于jQuery索引选择,这是我当前正在使用的选择,但是我需要一个无脚本的替代方法。 具体来说,我在寻找伪选择器,而不是添加其他类或使用ID来使事情正常工作。 问题答案: 您可能终于在发布此问题与今天之间意识到了这一

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