Selenium - 单击Automatic Random Generated DIV / ID / LINK

时间:2012-02-20 20:56:14

标签: java random selenium click

我正在尝试在用于搜索最便宜航班的网站上与Selenium进行演练。我已经能够完成所有搜索过程,但现在我被飞行选择所困扰。我设法按公司名称订购航班。现在我需要点击两个首班航班(出发,到达)。

正如您在附图中看到的那样,网页会生成两个表格。他们每个人都列出了一些航班。我需要点击每张桌子的第一张。

问题是生成的列表对不同的公司使用不同的DIV ID,并且ID具有随机数(“_ X”,X是随机数)。

我只需要点击每张桌子上的DIV,任何comlumn都应该成功。但是所有列都使用相同的名称(在两个表上)。

现在使用selenium IDE,但只需几个小时,因为航班,价格,小时不断更新,每次网页显示不同的结果,这意味着每次都有不同的ID。

有没有办法解决这个问题?

重要提示:我正在使用Jlen与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");

此时此操作有效,但在更新航班后,此功能将无法使用。有没有办法让硒一直点击每张桌子的正确的第一个航班?

提前多多感谢。

LINK TO IMAGE

1 个答案:

答案 0 :(得分:0)

在我看来,你应该尝试通过CSS选择器而不是使用ID选择器来选择必要的DIV。请仔细阅读下面的代码,找出我的意思。

    // 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();

这是一个edited example from the Official Selenium site