Как узнать, сколько раз WebElement присутствует в HTML DOM? - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть функция, которая возвращает WebElement. Теперь мне нужно выяснить его случаи или сказать, когда он присутствует.

Е.Г.

@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 голосов
/ 27 апреля 2018

Вы не можете извлечь локатор из существующего элемента.

В вашем примере вы передали String, представляющий локатор, и получили количество найденных элементов. Я бы посоветовал вам немного изменить это, чтобы вместо него взять By.

Если вы берете String, метод будет привязан к определенному типу локатора, т.е. в вашем случае XPath. Если вы берете локатор By, у вас может быть один метод, который принимает любой тип локатора.

Я бы предложил вам изменить ваш метод на

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

Если все, что вы хотите проверить, это наличие элемента (например, count> 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();
}
0 голосов
/ 26 апреля 2018

driver.findElements(By.xpath(string)); вернет список веб-элементов

тогда вы можете определить метод для этого:

public int getCount(List<WebElement> ele){
    if(ele!=null)return ele.size();
    return 0; // or can throw the exception
}
0 голосов
/ 27 апреля 2018

WebElement

A WebElement представляет один HTML элемент в HTML DOM .Таким образом, каждый WebElement уникален, и его присутствие не может быть в нескольких местах в DOM Tree .

В поисках WebElement вам необходимо вызвать метод findElement() следующим образом:

driver.findElement(By.xpath("unique_xpath_of_webelement"));

Но в соответствии с пробной версией кода, если вы хотите найти число любого конкретного тега, например <a>, в этом случае вы должны вызвать метод findElements() следующим образом:

driver.navigate().to("https://www.msn.com");
List<WebElement> elementList = driver.findElements(By.tagName("a"));
if (elementList.size()>0){
    foo();
} else {
    bar();
}

Если вы ищете метод, который принимает параметркак 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')]")
0 голосов
/ 26 апреля 2018
List <WebElement> ele=driver.findElements(By.tagName("a")); 
System.out.println(ele.size());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...