Как обрабатывать всплывающие окна или оповещения в селене? - PullRequest
0 голосов
/ 03 апреля 2019

всякий раз, когда я запускаю свой код, я получаю всплывающее окно.как отменить это всплывающее окно для сайта: https://www.goibibo.com/

всякий раз, когда я запускаю свой код, я получаю всплывающее окно.как отменить это всплывающее окно для сайта: https://www.goibibo.com/

package basic;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;


public class goibibo {
    private static WebDriver driver = null;
    public static void main(String[] args) throws InterruptedException  {
        // TODO Auto-generated method stub
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.goibibo.com/");
        new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='gosuggest_inputSrc']"))).sendKeys("A");
        Thread.sleep(1000);
        List<WebElement> myList = new WebDriverWait(driver, 20).until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//div[@class='dib marginL10 pad0 textOverflow width90']/div/span")));
        for (int i = 0; i < myList.size(); i++)
        {
                System.out.println(myList.get(i).getText());
                if (myList.get(i).getText().equals("Ahmedabad"))
                {
                    myList.get(i).click();
                    break;
                }
            }
        new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id=\"gosuggest_inputDest\"]"))).sendKeys("Mum");
        Thread.sleep(1000);
        List<WebElement> Dept = new WebDriverWait(driver, 20).until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//div[@class='dib marginL10 pad0 textOverflow width90']/div/span")));
        for (int j = 0; j < Dept.size(); j++)
        {
                System.out.println(Dept.get(j).getText());
                if (Dept.get(j).getText().equals("Mumbai"))
                {
                    Dept.get(j).click();
                    break;
                }
        }
        Thread.sleep(3000);
        driver.switchTo().alert().dismiss();
    }

}


no such alert

Ответы [ 3 ]

2 голосов
/ 03 апреля 2019

Во-первых, это не всплывающее окно, это Ифраме.

Вы можете получить больше информации по этой ссылке, как обрабатывать Ифраме в селене

Сначала вам нужно перейти кiframe.

, для этого вам нужно написать приведенный ниже код после того, как Thread.sleep(3000); найдет имя iframe из вашего HTML-источника.

driver.switchTo().frame("notification-frame-~2514428c7");
driver.findElement(By.xpath("//i[@class='wewidgeticon we_close']")).click();

С помощью этого вы можете закрыть всплывающее HTML-окно.

0 голосов
/ 03 апреля 2019

Это iframe, который останавливает вам доступ к элементу. Сначала используйте webdriverwait и switch до iframe, а затем получите доступ к элементу. Попробуйте приведенный ниже код.

driver.get("https://www.goibibo.com/");
WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//iframe[starts-with(@name ,'notification-frame-')]")));
WebElement element=wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//i[contains(@class ,'wewidgeticon')]")));
element.click();
0 голосов
/ 03 апреля 2019

как я вижу, это предупреждение, которое вы получаете правильно

enter image description here

так что вы можете сделать одну вещь, вы можете написать код для предупреждения, если оповещение видно, нажмите кнопку закрытия в окружении try catch, чтобы вы могли легко избавиться от оповещения, когда бы оно ни поступило, оно будет закрыто как можно скорее, и ваше выполнение будет нарушено, но вам нужно использовать ожидание для основных элементовнапример, для текстовых полей from и to, например, если вы дадите им меньше времени ожидания, и если всплывающее окно занимает много времени, то тестовый пример не будет выполнен, и еще одна вещь - всплывающее окно появляется только один раз за один сеанс, когда мы передаем источник изначения

дайте нам знать, если вам нужна дополнительная помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...