Selenium - нажмите на случайно выбранный DIV / ID / LINK. - PullRequest
0 голосов
/ 21 февраля 2012

Я пытаюсь провести обзор Selenium на веб-сайте, который используется для поиска самых дешевых рейсов. Я был в состоянии пройти через весь процесс поиска, но теперь я застрял в выборе полета. Мне удается заказать рейсы по названию компании. И теперь мне нужно нажать на два первых рейса (отправление, прибытие).

Как видно на прикрепленном изображении, веб-страница генерирует две таблицы. У каждого из них есть несколько рейсов в списке. Мне нужно щелкнуть мышью по первой таблице.

Проблема заключается в том, что в сгенерированном списке используются разные DIV ID для разных компаний, а идентификаторы имеют случайные числа ("_X", X - случайное число).

Мне просто нужно нажать на DIV на каждой таблице, любой столбец должен это сделать. Но все столбцы используют одно и то же имя (в обеих таблицах).

Использование Селен IDE работает сейчас, но только на несколько часов, потому что рейсы, цены, часы постоянно обновляются, и веб-страница показывает разные результаты каждый раз, что означает разные идентификаторы каждый раз.

Есть ли способ решить это?

ВАЖНО: я использую JAVA с Selenium. Нет PERL, нет PYTHON или другой.

Это будет Шаги, использующие JAVA сейчас:

// This orders the departure flight by company.
selenium.click("id=orden-compania-ida");
selenium.click("id=orden-compania-ida");

// This orders the arrival flights by company.
selenium.click("id=orden-compania-vuelta");
selenium.click("id=orden-compania-vuelta");

// This would click on the first link of first table
selenium.click("css=div.col-3 > label");
selenium.click("id=I_5");

// This would click on the first link of the second table
selenium.click("css=#TV_GDSAMADEUS_7 > div.col-3 > label");
selenium.click("id=V_12");

В данный момент это работает, но после обновления полета это больше не будет работать. Есть ли способ заставить селен кликать по правильному первому полету каждого стола все время?

Заранее большое спасибо.

ССЫЛКА НА ИЗОБРАЖЕНИЕ

1 Ответ

0 голосов
/ 21 февраля 2012

По моему мнению, вы должны попытаться выбрать необходимые DIVs с помощью селекторов CSS вместо использования идентификаторов. Пожалуйста, пройдите следующую часть кода, чтобы понять, что я имею в виду.

    // Open Firefox driver.
    WebDriver driver = new FirefoxDriver();

    // Send a get request.
    driver.get("http://google.com");

    // Typing a search query.
    WebElement searchField = driver.findElement(By.name("q"));
    searchField.sendKeys("Cheese!");

    // Waiting for the driver to change its title and load search results.
    new WebDriverWait(driver, 20).until(new ExpectedCondition<Boolean>() {
        public Boolean apply(WebDriver d) {
            return d.getTitle().toLowerCase().contains("cheese");
        }
    });

    // Obtain dymamically loaded search results.
    List<WebElement> results = driver.findElements(By.cssSelector("h3.r"));

    // Go through the search results
    for (WebElement element : results) {
        // You can click instead of printing.
        System.out.println(element.getText());
    }

    // Close the driver.
    driver.close();

Это отредактированный пример с официального сайта Selenium .

...