Селен недетерминированный цикл над списком <WebElement> - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь сделать несколько быстрых тестов, чтобы изучить селен в целях очистки.Я пытаюсь перебрать пункты меню на веб-сайте Taco Bell.Что меня смущает, так это то, что первый элемент списка - это не то, что выбирается при первом или втором щелчке.Фактическим выбором обычно является 2-й или 3-й элемент.Это недетерминированный.Что я делаю не так?

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import java.util.List;

public class Main {

    static WebDriver driver;

    public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.chrome.driver", "/Applications/chromedriver");
        driver = new ChromeDriver();
        driver.get("https://www.tacobell.com/food");
        List<WebElement> listOfMenuCategories = driver.findElements(By.cssSelector(".cls-category-card-item-card"));
        for(WebElement webElement : listOfMenuCategories){
            scanTacoBellMenuCategory(webElement);
        }
        System.out.println("1: "+listOfMenuCategories.size());

        driver.quit();
    }

    public static void scanTacoBellMenuCategory(WebElement webElement){
        webElement.click();
        List<WebElement> listOfSubMenuCategories = driver.findElements(By.cssSelector(".product-item"));
        for(WebElement submenuCategory : listOfSubMenuCategories){
            scanTacoBellSubMenuCategory(submenuCategory);
        }
    }

    public static void scanTacoBellSubMenuCategory(WebElement webElement){
        webElement.click();
    }
}

Спасибо.

ОБНОВЛЕНИЕ -------------------------------

Теперь я понимаю, что мой пример был излишне сложным и намерение не было очевидным.Вот более прямой пример:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import java.util.List;

public class MainTwo {

    static WebDriver driver;

    public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.chrome.driver", "/Applications/chromedriver");
        driver = new ChromeDriver();
        driver.get("https://www.tacobell.com/food");
        List<WebElement> listOfMenuCategories = driver.findElements(By.cssSelector(".cls-category-card-item-card"));
        for(WebElement webElement : listOfMenuCategories){
            webElement.click();
            break;
        }
        driver.quit();
    }
}

Меню такобелла (https://www.tacobell.com/food) имеет 16 категорий в следующем порядке: новые, избранные, комбинации, фирменные блюда, тако, буррито, кесадильи, начос,Меню «Значения», «Сладости», «Бокалы», «Напитки», «Меню питания», «Вечеринка», «Пакеты», «Вегетарианство», «Завтрак».

Когда я зацикливаюсь на этих элементах, я «щелкаю» по первому в цикле forEach.быть "новой" категорией. Я также ожидал бы, что результат будет повторяемым. Однако ни одно из этих утверждений не является истинным. Обычно оно открывает одно из меню "Избранное", "Комбинации" или "Специальности". Однако оно можетдействительно открыты почти все.

Кажется, что Webdriver каким-то образом неблокирует. В частности, событие webElement.click (), кажется, не останавливает выполнение цикла forEach.почти так же, как если бы webElement был в другом потоке.

Почему не отображается меню «Новое», когда я запускаю приведенный выше код, и почему это не является детерминированным?

...