按属性名称查找包含冒号的元素

时间:2017-03-15 02:54:24

标签: java selenium

使用selenium和TestNG进行Java自动化

我正在自动化包含svg #document对象的网页。 该页面包含用于打开和关闭svg文档图层的控件。

我已经将控件重新映射到他们的标签,以便在我的测试中使用,我打算通过验证在每个图层打开后显示该图层中的元素来测试图层控件(反之亦然)每层关闭)。

我能想到的最好的方法是迭代地将每个元素添加到List中。 结果实际上是: list1包含所有layer1元素, list2包含所有layer2元素, list3包含所有layer3元素。

就我所知,唯一可以告诉它在各自层中的每个元素都是通用的,是一个名为" v:layerMember"的属性。每个图层" v:layerMember"属性具有不同的值,因此区分每个层中的元素不是问题。 我会识别每个图层的元素,如下所示:

layer1 = driver.findElements(By.something("v:layerMember=0"));
layer2 = driver.findElements(By.something("v:layerMember=15"));
layer3 = driver.findElements(By.something("v:layerMember=16"));

OR

@FindBy(something="v:layerMember='0'")
List layer1;

@FindBy(something="v:layerMember='15'")
List layer2;

@FindBy(something="v:layerMember='16'")
List layer3;

问题:

我尝试通过xpath,css甚至JQuery查找每一组图层元素。无论如何,每个人总是返回一个空列表。 我通过id找到每个元素取得了成功,但由于其中有超过35个元素,因此前进有点不切实际。 甚至可以通过包含"的属性名称来查找:"字符?

需要一些帮助。

编辑:

我想出了一种方法来做我想做的事情。它的性能不是很好,而且有点粗糙,但我认为它会成功,直到我有时间找到更好的方法。

注意:它出现在js atm中,因为我正在摆弄html doc。应该很容易翻译成Java。

function getElementsByAttributeContains(attrSubString) {
    var refinedList = [];
    var baseList = document.querySelectorAll('g[style]');

    for (var i = 0; i < baseList.length; i++) {
        if (baseList[i].outerHTML.toString().search(attrSubString) != -1) {
            refinedList.push(baseList[i]);
        }   
    }
    for(var j = 0; j < refinedList.length; j++) {
        if (refinedList[j].getAttribute('style').search("transform") != -1){
            refinedList.splice(j, 1);
            j = j - 1;
        }
    }
    return refinedList;
};

1 个答案:

答案 0 :(得分:0)

使用public class Midterm{ public static void main(String[] args){ int[] C = {10,16,4,10,14,7,9,3,2,8,1}; /*for convenience, the first element in array C represent the number of elements needed to be heapified; */ Midterm heap = new Midterm(); int n = C.length - 1; for (int i = (n / 2); i > 0; i--){ heap.maxHeapify(C, i, n); } int index = 1; while(index <= n){ System.out.print(C[index] + " "); index++; } System.out.println(); Midterm heap2 = new Midterm(); heap2.heapSort(C); int index2 = 1; while(index2 <= n){ System.out.print(C[index2] + " "); index2++; } System.out.println(); } public void heapSort(int[] A){ int n = A.length - 1; for (int i = n; i >= 2; i--){ exchange(A, 1, i); maxHeapify(A, 1, i - 1); } } public void maxHeapify(int[] A, int i, int n){ int left = 2 *i, right = 2 * i + 1; int largest; if (left < n && A[left] > A[i]){ largest = left; }else{ largest = i; } if (right < n && A[right] > A[largest]){ largest = right; } if (largest != i){ exchange(A, i, largest); maxHeapify(A, largest,n); } } private void exchange(int[] A, int i , int j){ int temp = A[i]; A[i] = A[j]; A[j] = temp; } } cssSelector,您需要在属性

周围加上方括号
xpath