如何查找HTML DOM中WebElement的出现次数?

时间:2018-04-26 08:14:19

标签: java list selenium selenium-webdriver webdriver

我有一个返回WebElement的函数。现在我需要找出它的出现或说它存在的时间。

E.g。

@Test
public void elementCount() {
    navigate("https://www.msn.com");
    WebElement element = driver.findElement(By.xpath("//a"));
    if (elementCount(element)>0){
        foo();
    } else {
       bar();
    }
}

我有另一个方法,它将参数作为字符串:

public int elementCount(String string) {
    int i = driver.findElements(By.xpath(string)).size();
    if (i > 0) {
        System.out.println("Element count is "+i);
    } else {
        System.out.println("Element not found);
    }
    return i;
}

我需要另一种方法,它将WebElement作为参数并给我计数。我尝试使用By投射它,但它给了我错误org.openqa.selenium.remote.RemoteWebElement cannot be cast to org.openqa.selenium.By无法想到任何其他内容。

我正在使用Windows,Java,Selenium,testNg,Maven

4 个答案:

答案 0 :(得分:0)

List <WebElement> ele=driver.findElements(By.tagName("a")); 
System.out.println(ele.size());

答案 1 :(得分:0)

driver.findElements(By.xpath(string));将返回Web元素列表

然后你可以像这样定义方法:

public int getCount(List<WebElement> ele){
    if(ele!=null)return ele.size();
    return 0; // or can throw the exception
}

答案 2 :(得分:0)

WebElement

overload表示WebElement中的单个 HTML 元素。因此,每个 WebElement 都是唯一的,它的存在不能出现在HTML DOM的多个位置。

要了解 WebElement ,您需要按如下方式调用DOM Tree方法:

<a>

但是根据您的代码试用,如果您想查找任何特定代码的数字,例如driver.navigate().to("https://www.msn.com"); List<WebElement> elementList = driver.findElements(By.tagName("a")); if (elementList.size()>0){ foo(); } else { bar(); } 在这种情况下,您必须按如下方式调用findElement()方法:

String

如果您正在寻找一个将参数作为public int elementCount(String myString) { int i = driver.findElements(By.xpath(myString)).size(); if (i > 0) { System.out.println("Element count is : "+i); } else { System.out.println("No such element found matching the provided xpath"); } return i; } 的方法,您可以使用以下代码块:

main()

现在,您可以随时通过@Test / xpath调用该方法以及所需的int myCount = elementCount("//*[contains(text(),'paul')]")

expected: "false" got: ""

答案 3 :(得分:0)

您无法从现有元素中提取定位器。

在您的示例中,您传递了表示定位器的String并获取已找到元素的计数。我建议您稍微更改一下以取代By

如果你选择String,该方法将绑定到某个定位器类型,即你的XPath。如果您使用By定位器,则可以使用一种采用任何定位器类型的方法。

我建议你将方法改为

public int elementCount(By locator) {
    return driver.findElements(locator).size();
}

如果您要测试的只是元素的存在(例如,计数&gt; 0,就像您的测试用例一样),那么您可以将上述函数更改为

public bool elementExists(By locator) {
    return driver.findElements(locator).size() > 0;
}

使用此方法会将您的测试用例更改为

@Test
public void elementCount() {
    navigate("https://www.msn.com");
    elementExists(By.tagName("a")) ? foo() : bar();
}