Selenium webdriver org.openqa.selenium.ElementNotVisibleException:第二次切换到同一弹出窗口后,元素不可见

Selenium webdriver org.openqa.selenium.ElementNotVisibleException:第二次切换到同一弹出窗口后,元素不可见,selenium-webdriver,nosuchelementexception,Selenium Webdriver,Nosuchelementexception,我试图在德国航空公司的网站-URL-中自动搜索航班用例。 点击From链接后,弹出窗口,我们必须从下拉列表中选择原产国,根据国家变量,将加载city下拉列表,选择city后,相应的机场将填充到第三个下拉列表中。然后,焦点必须转移到主窗口,并且必须单击“收件人”链接,这再次导致相同的弹出窗口(目的地县>>城市>>机场的下拉窗口相同)。这里是我得到错误的地方。似乎WbDriver再次切换到同一个poopup,但它无法在页面上找到元素。这和第一次一样令人沮丧。我的代码如下- 公务舱航班{ public

我试图在德国航空公司的网站-URL-中自动搜索航班用例。 点击From链接后,弹出窗口,我们必须从下拉列表中选择原产国,根据国家变量,将加载city下拉列表,选择city后,相应的机场将填充到第三个下拉列表中。然后,焦点必须转移到主窗口,并且必须单击“收件人”链接,这再次导致相同的弹出窗口(目的地县>>城市>>机场的下拉窗口相同)。这里是我得到错误的地方。似乎WbDriver再次切换到同一个poopup,但它无法在页面上找到元素。这和第一次一样令人沮丧。我的代码如下-

公务舱航班{

public static void main(String[] args) throws InterruptedException {

    System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.get("http://www.lufthansa.com/online/portal/lh/ua/homepage");
    Thread.sleep(3000L);
    String main_window = driver.getWindowHandle();
    System.out.println("Main Window Handle: "+driver.getWindowHandle());
    Thread.sleep(3000L);
    driver.findElement(By.xpath("//a[@href='#']/span[@class='airport-dir']")).click();
    Thread.sleep(3000L);
    for(String sub1_window : driver.getWindowHandles()){
        driver.switchTo().window(sub1_window);
        driver.findElement(By.xpath("//div[@class='cl first']/ul[@class='aa-select aa-  country']/li[@data-value='IN']")).click();
        Thread.sleep(2000L);
        driver.findElement(By.xpath("//div[@class='cl']/ul[@class='aa-select aa-city']/li[@data-value='DEL']")).click();
        Thread.sleep(2000L);
        driver.findElement(By.xpath("//div[@class='cl last']/ul[@class='aa-select aa-airport']/li[@data-value='DEL']")).click();
        Thread.sleep(2000L);
        driver.switchTo().window(main_window);
        Thread.sleep(2000L);
        driver.findElement(By.xpath("//a[@href='#'][@id ='aa-destination']/span[@class='airport-dir']")).click();
         Thread.sleep(2000L);
        driver.switchTo().window(sub1_window);
            Thread.sleep(3000L);
            System.out.println("Sub Window2 Handle: ");
            driver.findElement(By.xpath("//div[@class='cl first']/ul[@class='aa-select aa-country']/li[@data-value='HK']")).click();
            Thread.sleep(3000L);
            driver.findElement(By.xpath("//div[@class='cl']/ul[@class='aa-select aa-city']/li[@data-value='IEV']")).click();
            Thread.sleep(3000L);
            //driver.findElement(By.xpath("//a[@title='Select'][@href='#']/span")).click();
            driver.findElement(By.xpath("//div[@class='cl last']/ul[@class='aa-select aa-airport']/li[@data-value='KBP']")).click();
            Thread.sleep(3000L);*/
    }
     driver.switchTo().window(main_window);*/
}

您试图处理的元素不在另一个窗口上,而是在同一个窗口上。 试试这个

public static void main(String[] args) throws InterruptedException {
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.get("http://www.lufthansa.com/online/portal/lh/ua/homepage");
String main_window = driver.getWindowHandle();
WebElement from = driver.findElement(By.id("aa-origin"));
from.click();
Thread.sleep(3000L);
driver.findElement(By.xpath("//div[@class='cl first']/ul[@class='aa-select aa-country']/li[@data-value='IN']")).click();
 Thread.sleep(2000L);
 driver.findElement(By.xpath("//div[@class='cl']/ul[@class='aa-select aa-city']/li[@data-value='DEL']")).click();
 Thread.sleep(2000L);
 driver.findElement(By.xpath("//div[@class='cl last']/ul[@class='aa-select aa-airport']/li[@data-value='DEL']")).click();
 Thread.sleep(2000L);
 WebElement to = driver.findElement(By.id("aa-destination"));
 to.click();
 Thread.sleep(3000L);
 driver.findElement(By.xpath(".//*[@id='dijit_Dialog_1']/div[2]/div/div[2]/div[1]/ul/li[@data-value='HK']")).click();
 Thread.sleep(3000L);
 driver.findElement(By.xpath(".//*[@id='dijit_Dialog_1']/div[2]/div/div[2]/div[3]/ul/li[@data-value='HKG']")).click();
 Thread.sleep(3000L);
 driver.findElement(By.xpath(".//*[@id='dijit_Dialog_1']/div[2]/div/div[2]/div[5]/ul/li[@data-value='HKG']")).click();
 Thread.sleep(3000L);}

这仍然不起作用,它在单击to元素后仍然被卡住,它使元素不可见。我正在使用chromedriver..无法运行ff驱动程序,因为我有ff版本32,并且看起来与WD jar 2.42.2不兼容..请帮助..这对您有效吗?当我为to之后的元素替换xpath时,它起作用了。单击(),我尝试了yout xpath,它似乎是绝对的xpath,为什么这个xpath无效,因为它几乎与用于From节元素的xpath相同,这就是这里的问题,因为From-an-to元素的xpath似乎相同,所以webdriver将“to”元素的xpath与“From”匹配元素,并抛出一个元素不可见的错误。webdriver的一点是它只能处理页面上可见的元素。因此,当您单击“To”元素时,“To Airport”部分变为可见,而“From Airport”部分也变为可见也在页面上,但不可见。是的,此代码对我有效!在使用您上面提到的代码后,此代码现在对我有效