使用selenium给出错误在java中获取隐藏元素

当我选择值隐藏其显示错误为:

线程“main”中的exceptionorg.openqa.selenium.NoSuchElementException:无法定位元素:{“method”:“部分链接文本”,“选择器”:“vehicle-make”}

这是我的代码:

package section5.advWays.locatingObjects; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.Select; public class CusXPathUsingAtt1 { public static void main(String[] args) throws InterruptedException { // TODO Auto-generated method stub WebDriver wd = new FirefoxDriver(); wd.manage().window().maximize(); Thread.sleep(5000); wd.get("http://www.tirerack.com/content/tirerack/desktop/en/homepage.html"); Select SelectMakedropdown = new Select(wd.findElement(By.id("vehicle-make"))); SelectMakedropdown.selectByVisibleText("BMW"); Select YearSelectDropdown = new Select(wd.findElement(By.id("vehicle-year"))); YearSelectDropdown.selectByVisibleText("2011"); Select VehicleSelectDropdown = new Select(wd.findElement(By.id("vehicle-model"))); VehicleSelectDropdown.selectByVisibleText("228i xDrive Coupe"); } } 

如何使用selenium webdriver选择那些下拉列表?

有两件事:

  1. 我发现您首先需要单击一个元素,否则将不会打开“选择”菜单。 所以在我的代码中,我首先点击元素以启用选择菜单。
  2. 还有一些元素不容易获得。 比如说,除非输入Make,否则不会启用Year。

请参阅以下代码:

 WebDriver driver= new FirefoxDriver(); driver.get("http://www.tirerack.com/content/tirerack/desktop/en/homepage.html"); WebDriverWait wait = new WebDriverWait(driver, 30); wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[contains(text(),'Select Make')]"))); driver.findElement(By.xpath("//div[contains(text(),'Select Make')]")).click(); wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("vehicle-make"))); Select SelectMakedropdown = new Select(driver.findElement(By.id("vehicle-make"))); SelectMakedropdown.selectByVisibleText("BMW"); wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[contains(text(),'Select Year')]"))); driver.findElement(By.xpath("//div[contains(text(),'Select Year')]")).click(); wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("vehicle-year"))); Select YearSelectDropdown = new Select(driver.findElement(By.id("vehicle-year"))); YearSelectDropdown.selectByVisibleText("2011"); wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[contains(text(),'Select Model')]"))); driver.findElement(By.xpath("//div[contains(text(),'Select Model')]")).click(); wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("vehicle-model"))); Select VehicleSelectDropdown = new Select(driver.findElement(By.id("vehicle-model"))); VehicleSelectDropdown.selectByVisibleText("128i Cabriolet Base Model"); driver.quit(); 

Firefox的更新:

我尝试了很多,但我仍然无法确定为什么选择不适用于Firefox。 但我仍然设法解决这个问题。 在这里,我使用较少的点击次数和更多应用程序支持的function。

 WebDriver driver= new FirefoxDriver(); driver.get("http://www.tirerack.com/content/tirerack/desktop/en/homepage.html"); WebDriverWait wait = new WebDriverWait(driver, 30); JavascriptExecutor executor = (JavascriptExecutor) driver; wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[contains(text(),'Select Make')]"))); WebElement we1 = driver.findElement(By.xpath("//div[contains(text(),'Select Make')]")); executor.executeScript("arguments[0].click();", we1); wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("vehicle-make"))); WebElement SelectMakedropdown = driver.findElement(By.id("vehicle-make")); SelectMakedropdown.sendKeys("BMW"); SelectMakedropdown.sendKeys(Keys.ENTER); Thread.sleep(1000); wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[contains(text(),'Select Year')]"))); WebElement we2 = driver.findElement(By.xpath("//div[contains(text(),'Select Year')]")); executor.executeScript("arguments[0].click();", we2); wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("vehicle-year"))); WebElement YearSelectDropdown = driver.findElement(By.id("vehicle-year")); YearSelectDropdown.sendKeys("2011"); YearSelectDropdown.sendKeys(Keys.ENTER); Thread.sleep(1000); wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[contains(text(),'Select Model')]"))); WebElement we3 = driver.findElement(By.xpath("//div[contains(text(),'Select Model')]")); executor.executeScript("arguments[0].click();", we3); wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("vehicle-model"))); WebElement VehicleSelectDropdown = driver.findElement(By.id("vehicle-model")); VehicleSelectDropdown.sendKeys("128i Cabriolet Base Model"); VehicleSelectDropdown.sendKeys(Keys.ENTER); 

看来页面首先需要点击下拉列表,试试这段代码:

  wd.findElement(By.xpath("//*[@id='shopByVehicle-search-change']/div[1]/div[1]")).click(); Select SelectMakedropdown = new Select(wd.findElement(By.id("vehicle-make"))); SelectMakedropdown.selectByVisibleText("BMW"); 

以上将肯定会运行。