Перейти к содержимому

Фотография

Как в Selenium работать с окном выбора?

webdriver

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 11

#1 Driver

Driver

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Иванов

Отправлено 09 февраля 2015 - 13:38

Всем, Добрый день!
Есть основная форма веб клиента, так же на этой форме много разных кнопок. При нажатии одной из кнопок открывается еще одно окно выбора товара, в котором нужно кликнуть по товару, после чего форма закроется и товар отобразится на главной форме.

Подскажите, пожалуйста, как обработать такую ситуацию с помощью Selenium используя язык Java?

У меня получается открыть второе окно, но кликнуть и выбрать товар никак...Видимо там как то фокус нужно установить на вторую форму?

public class test1 {
    private WebDriver driver;
    private String baseUrl;
    private StringBuffer verificationErrors = new StringBuffer();

    @Before
    public void setUp() throws Exception {
        driver =new InternetExplorerDriver();
        baseUrl = "http://localhost/test1";
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    }

    @Test
    public void testSample() throws Exception {
        
         
            driver.get(baseUrl);
            
            driver.findElement(By.id("loginContainer_username")).clear();
            driver.findElement(By.id("loginContainer_username")).sendKeys("da");
            driver.findElement(By.id("loginContainer_password")).clear();
            driver.findElement(By.id("loginContainer_password")).sendKeys("da");
            driver.findElement(By.name("loginContainer$ctl05")).click();
            driver.findElement(By.id("tdImbButtonmenu_2")).click();
            driver.findElement(By.id("manageFilter_ctl00_filterItem_buttonEnter_popupButton")).click();
            driver.findElement(By.id("itemDataGrid_ctl03_ctl05")).click();
    }    

    @After
    public void tearDown() throws Exception {
      driver.quit();
      String verificationErrorString = verificationErrors.toString();
      if (!"".equals(verificationErrorString)) {
        fail(verificationErrorString);
      }
    }
}

  • 0

#2 Petrov.Sergey

Petrov.Sergey

    Опытный участник

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 09 февраля 2015 - 13:49

вторая форма - это новая вкладка, или это новый фрейм, или.... что это?


  • 0
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).

#3 Driver

Driver

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Иванов

Отправлено 09 февраля 2015 - 13:53

вторая форма - это новая вкладка, или это новый фрейм, или.... что это?

Нет это не фрейм, а просто новое окно которое открывается при нажатии на кнопку "Товар" на главной форме.


  • 0

#4 Petrov.Sergey

Petrov.Sergey

    Опытный участник

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 09 февраля 2015 - 14:06

Если Вы уверены, что это новое окно, то используя getWindowHandles() и switchTo(), Вы можете переключаться между основным окном и новым и обратно.

Удачи!


  • 0
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).

#5 Driver

Driver

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Иванов

Отправлено 09 февраля 2015 - 16:03

Если Вы уверены, что это новое окно, то используя getWindowHandles() и switchTo(), Вы можете переключаться между основным окном и новым и обратно.

Удачи!

Petrov.Sergey, извините за наглость, а можете на моем примере показать как использовать данные методы. А то что то не получается(
  • 0

#6 Petrov.Sergey

Petrov.Sergey

    Опытный участник

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 10 февраля 2015 - 06:48

Ну, например, так:

Set<String> windows = driver.getWindowHandles();
Iterator<String> it = windows.iterator();
String mainWindow = (String) it.next();
String popUp = (String) it.next();
driver.switchTo().window(popUp);
driver.close();
driver.switchTo().window(mainWindow);

  • 0
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).

#7 Driver

Driver

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Иванов

Отправлено 10 февраля 2015 - 09:20

 

Ну, например, так:

Set<String> windows = driver.getWindowHandles();
Iterator<String> it = windows.iterator();
String mainWindow = (String) it.next();
String popUp = (String) it.next();
driver.switchTo().window(popUp);
driver.close();
driver.switchTo().window(mainWindow);
Petrov.Sergey, спасибо что помогаете. Сделал так как в примере ниже, но почему то ошибка "java.util.NoSuchElementException"

 

public class Test1 {
    private WebDriver driver;
    private String baseUrl;
    private StringBuffer verificationErrors = new StringBuffer();
    
   

    @Before
    public void setUp() throws Exception {
        driver =new InternetExplorerDriver();
        baseUrl = "http://localhost/Test1";
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    }

    @Test
    public void testSample() throws Exception {
        
        
            driver.get(baseUrl);
            
            driver.findElement(By.id("loginContainer_username")).clear();
            driver.findElement(By.id("loginContainer_username")).sendKeys("da");
            driver.findElement(By.id("loginContainer_password")).clear();
            driver.findElement(By.id("loginContainer_password")).sendKeys("da");
            driver.findElement(By.name("loginContainer$ctl05")).click();
            driver.findElement(By.id("tdImbButtonmenu_2")).click();
           
            Set<String> windows = driver.getWindowHandles();
            
            driver.findElement(By.id("manageFilter_ctl00_filterItem_buttonEnter_popupButton")).click();
            
            Iterator<String> it = windows.iterator();
            String mainWindow = (String) it.next();
            String popUp = (String) it.next();
            driver.switchTo().window(popUp);
           
            driver.findElement(By.id("itemDataGrid_ctl03_ctl05")).click();
            
                 driver.close();
                 driver.switchTo().window(mainWindow);
            
    }    

    @After
    public void tearDown() throws Exception {
      driver.quit();
      String verificationErrorString = verificationErrors.toString();
      if (!"".equals(verificationErrorString)) {
        fail(verificationErrorString);
      }
    }
}
 


  • 0

#8 Petrov.Sergey

Petrov.Sergey

    Опытный участник

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 10 февраля 2015 - 10:06

На какой строчке ругается?

Всю информацию давайте, пожалуйста.


  • 0
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).

#9 Driver

Driver

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Иванов

Отправлено 10 февраля 2015 - 11:55

На какой строчке ругается?

Всю информацию давайте, пожалуйста.

Ругается вроде на  String popUp = (String) it.next();

 

Вот весь трейс:

java.util.NoSuchElementException
    at java.util.LinkedHashMap$LinkedHashIterator.nextNode(Unknown Source)
    at java.util.LinkedHashMap$LinkedKeyIterator.next(Unknown Source)
    at com.example.tests.Test1.testSample(Test1.java:54)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)


  • 0

#10 Petrov.Sergey

Petrov.Sergey

    Опытный участник

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 10 февраля 2015 - 12:13

 

На какой строчке ругается?

Всю информацию давайте, пожалуйста.

Ругается вроде на  String popUp = (String) it.next();

 

Значит, попап у Вас - это не отдельное окно!

Разберитесь сначала, с чем Вы работаете.


  • 0
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).

#11 Driver

Driver

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Иванов

Отправлено 10 февраля 2015 - 12:44

 

 

На какой строчке ругается?

Всю информацию давайте, пожалуйста.

Ругается вроде на  String popUp = (String) it.next();

 

Значит, попап у Вас - это не отдельное окно!

Разберитесь сначала, с чем Вы работаете.

 

Выглядит именно как новое окно.


  • 0

#12 Driver

Driver

    Новый участник

  • Members
  • Pip
  • 12 сообщений
  • ФИО:Иванов

Отправлено 10 февраля 2015 - 13:55

Проблема решена, помог Petrov.Sergey. Спасибо!

 

Вот решение в примере:

 

@Test
    public void testSample() throws Exception {
        
        
            driver.get(baseUrl);
            
            driver.findElement(By.id("loginContainer_username")).clear();
            driver.findElement(By.id("loginContainer_username")).sendKeys("da");
            driver.findElement(By.id("loginContainer_password")).clear();
            driver.findElement(By.id("loginContainer_password")).sendKeys("da");
            driver.findElement(By.name("loginContainer$ctl05")).click();
            driver.findElement(By.id("tdImbButtonmenu_2")).click();
           
          
            
            driver.findElement(By.id("manageFilter_ctl00_filterItem_buttonEnter_popupButton")).click();
            Set<String> windows = driver.getWindowHandles();
            Iterator<String> it = windows.iterator();
            String mainWindow = (String) it.next();
            String popUp = (String) it.next();
            driver.switchTo().window(popUp);
            driver.findElement(By.id("itemDataGrid_ctl03_ctl05")).click();
            driver.close();
            driver.switchTo().window(mainWindow);
            
    }    
 


  • 0



Темы с аналогичным тегами webdriver

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных