即使我的xpath是唯一的,元素也不是可见错误

时间:2017-09-09 09:21:52

标签: xpath selenium-webdriver element invisible

即使我的xpath是唯一的

,元素也不是可见错误
//System.setProperty("webdriver.chrome.driver", "C://chromedriver.exe");

//WebDriver driver= new FirefoxDriver();
//WebDriver driver= new ChromeDriver();

driver.manage().window().maximize();
driver.get("https://www.goindigo.in/");

driver.findElement(By.linkText("One Way")).click();
driver.findElement(By.xpath("//button[@class='btn buttonGlbl btn-close button-trigger']")).click();
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.findElement(By.xpath("//div[@class='innertab-content one-way-tab-ctnt']//li[@class='city-dropdown destination-dropdown ps-destination-dropdown without_label']//div[@class='city-dropdown-list city-name-to']//ul//li[3]")).click();
}
}//

2 个答案:

答案 0 :(得分:0)

/System.setProperty("webdriver.chrome.driver", "C://chromedriver.exe");

//WebDriver driver= new FirefoxDriver();
//WebDriver driver= new ChromeDriver();

driver.manage().window().maximize();
driver.get("https://www.goindigo.in/");

WebElement onewayLink=driver.findElement(By.linkText("One Way"));
onewayLink.click();
WebElement btnElement=driver.findElement(By.xpath("//button[@class='btn buttonGlbl btn-close button-trigger']"));

WebDriverWait wait= new WebDriverWait(driver,20 );
wait.until(ExpectedConditions.visibilityOf(btnElement));
btnElement.click();
driver.findElement(By.xpath("//div[@class='innertab-content one-way-tab-ctnt']//li[@class='city-dropdown destination-dropdown ps-destination-dropdown without_label']//div[@class='city-dropdown-list city-name-to']//ul//li[3]")).click();
}
}//

答案 1 :(得分:0)

以上回答,没有人触及根本原因,它与需要等待一些元素无关。

根本原因是你需要点击From / To city的输入框以弹出城市列表,然后点击你想要的城市。

这是一种硒设计原则:在硒点击之前必须看到一个元素。

selenium desinger希望它可以从用户角度进行模拟器操作,因为我们知道用户需要先查看城市列表才能选择一个。因此,我们还需要让selenium首先“看到”城市列表。

但有一个例外,当你想从Select中选择一个选项时,你可以 直接点击你想要的选项,不需要先弹出选项。

你可以从下面链接找到这样的问题,我会给出详细的答案 Using firefox webdriver trying to load the option Name from dropdown but not working?

解决问题的代码段:

driver.get("https://www.goindigo.in/"); 
// click 'One Way' tab
driver.findElement(By.css(".one-way-tab")).click();
// Click 'OK' on Information pop-up
driver.findElement(By.css(".buttonGlbl.btn-close")).click();

// Click 'From' city input box for 'One Way'
driver.findElement(By.css("#oneWay .origins-value.city-name-value")).click();
// Choose city 'Delhi'
driver.findElement(By.css("#oneWay .origin-city-name"))
      .findElement(By.partialLinkText("Delhi"))
      .click();

// Click 'To' city input box for 'One Way'
driver.findElement(By.css("#oneWay .destinations-value.city-name-value")).click();
// Choose city 'Indore'
driver.findElement(By.css("#oneWay .dest-city-name"))
      .findElement(By.partialLinkText("Indore"))
      .click();