我正在尝试在用于搜索最便宜航班的网站上与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");
此时此操作有效,但在更新航班后,此功能将无法使用。有没有办法让硒一直点击每张桌子的正确的第一个航班?
提前多多感谢。
答案 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();