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

Фотография

Selenium

Выбор из двух попапов

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

#1 Aleksey_16

Aleksey_16

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

  • Members
  • Pip
  • 4 сообщений

Отправлено 13 апреля 2018 - 07:42

Добрый день. Прошу у вас подсказки в решении следующей задачи:

Есть цикл проверки опций в тарифе (их 27) они все снабжены "тумблером"

Есть два вида попапов в зависимости от опции

Написал тест с методом "if/else", но при  не нахождении первого попапа тест падает не переходя к "else"

попапы закрываются по нажатию на крестик, но классы у них разные

 

Как мне описать код так, чтобы в случае, если первый попап не вылез, сработало нажатие крестика на втором?  Вот код(все данные относящиеся к компании заменены на "..."):

 

 

 package ....:

 
import org.testng.annotations.BeforeTest;
import org.testng.annotations.AfterTest;
import org.testng.annotations.Test;
import utilities.Constants;
import utilities.Regions;
import utilities.Scheme;
import static org.testng.Assert.assertTrue;
 
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
 
    public class ... {
    WebDriver wd = new ChromeDriver();
    private Cookie Cookie_new = new Cookie("....", "yes");
            private Object iClassName;
 
            @BeforeTest
    public void setUp() throws Exception {         
        wd.manage().timeouts().implicitlyWait(Constants.TIMEUPS, TimeUnit.SECONDS);
        wd.manage().window().maximize();
    }
    
    @Test
    public void ... () throws InterruptedException {
            wd.get(Constants.formUrlink(Scheme.HTTP, Regions....));
            wd.manage().addCookie(Cookie_new);
            wd.get(Constants.formUrlink(Scheme.HTTP, Regions....));
 
 
            List<WebElement> checker = wd.findElements(By.xpath("...."));
 
 
            for (WebElement oneClick : checker) {
                oneClick.click();
                wd.findElement(By.id("cart-street")).click();
                wd.findElement(By.id("cart-street")).clear();
                wd.findElement(By.id("cart-street")).sendKeys("....");
                wd.findElement(By.id("cart-build")).click();
                wd.findElement(By.id("cart-build")).clear();
                wd.findElement(By.id("cart-build")).sendKeys("...");
                wd.findElement(By.id("cart-flat")).click();
                wd.findElement(By.id("cart-flat")).clear();
                wd.findElement(By.id("cart-flat")).sendKeys("...");
                wd.findElement(By.name("fio")).click();
                wd.findElement(By.name("fio")).clear();
                wd.findElement(By.name("fio")).sendKeys("...");
                wd.findElement(By.name("company")).click();
                wd.findElement(By.name("company")).clear();
                wd.findElement(By.name("company")).sendKeys("...");
                wd.findElement(By.name("phone")).click();
                wd.findElement(By.name("phone")).clear();
                wd.findElement(By.name("phone")).sendKeys("....");
                wd.findElement(By.name("email")).click();
                wd.findElement(By.name("email")).clear();
                wd.findElement(By.name("email")).sendKeys("...");
                wd.findElement(By.name("comment")).click();
                wd.findElement(By.name("comment")).clear();
                wd.findElement(By.name("comment")).sendKeys("....");
                wd.findElement(By.id("send-order-form")).click();
 
                                                             
                if (wd.findElement(By.xpath("1ый попап)).isDisplayed() ) 
                {
                  wd.findElement(By.xpath("1ый крестик")).click();
                } 
                else if (wd.findElement(By.xpath("2ой попап")).isDisplayed() ) 
                {
                   wd.findElement (By.xpath("2ой крестик")).click();
                 }                      
                                                                                                                                      
                oneClick.click();
            }
 
        }
 
@AfterTest
    public void tearDown() {
        wd.quit();
    }   
    public static boolean isAlertPresent(ChromeDriver wd) {
        try {
            wd.switchTo().alert();
            return true;
        } catch (NoAlertPresentException e) {
            return false;
        }
    }

  • 0

#2 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 980 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 13 апреля 2018 - 10:07

Хотелось бы увидеть ошибку, почему тест падает?


  • 0

#3 Aleksey_16

Aleksey_16

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

  • Members
  • Pip
  • 4 сообщений

Отправлено 13 апреля 2018 - 10:16

Unable to locate element: {"method":"xpath","selector":"..."}


  • 0

#4 Aleksey_16

Aleksey_16

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

  • Members
  • Pip
  • 4 сообщений

Отправлено 13 апреля 2018 - 10:17

Когда появляется первый попап (это 6 опций первых) всё работает отлично, но как только вылезает второй, селениум теряет первый и падает 


  • 0

#5 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 980 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 13 апреля 2018 - 12:51

Unable to locate element: {"method":"xpath","selector":"..."}

Скорее всего, когда нет первого попап у вас возникает исключение на строке if (wd.findElement(By.xpath("1ый попап)).isDisplayed() ) 

И генерирует его метод findElement. Вы пытаетесь посмотреть видимость несуществующего элемента. Поэтому вам нужно либо обрабатывать это исключение в try...catch, и проверять видимость только после проверки на существование элемента, либо вместо findElement использовать свою доработанную функцию, которая будет возвращать не исключение, а true/false. У вас в коде есть похожая функция проверки алерта "isAlertPresent".


  • 1

#6 Aleksey_16

Aleksey_16

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

  • Members
  • Pip
  • 4 сообщений

Отправлено 18 апреля 2018 - 04:37

Не стал мудрить и просто прикрутил "ESC" после того, как появляется попап. В моём тесте нужно только форму заполнения проверить, так что попапы не важны.

Спасибо за ответ. 


  • 0


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

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