Код Selenium Web Driver с Java, который не перемещается по сайту - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть код ниже в затмении.Я пытаюсь выполнить это в Chrome.Работает до тех пор, пока не нажмете на ID #divpaxinfo, но не добавит количество взрослых.На IE он ничего не делает.Он просто открывает веб-страницу и прекращает навигацию.Я изо всех сил пытался понять, в чем проблема, но в моем конце нет ничего плохого.С чем может быть проблема?

package testProject2;

import org.openqa.selenium.By;

import org.openqa.selenium.By.ById;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;

import org.openqa.selenium.support.ui.Select;

public class test2 {

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        System.setProperty("webdriver.chrome.driver", "C:\\Users\\bk0107\\Documents\\QA\\chromedriver.exe");

        WebDriver driver = new ChromeDriver();



        driver.get("http://spicejet.com");

        driver.findElement(By.id("divpaxinfo")).click();

           /*int i=1;

        while(i<5)

        {

        driver.findElement(By.id("hrefIncAdt")).click();//4 times

        i++;

        }*/

           System.out.println(driver.findElement(By.id("divpaxinfo")).getText());

        for(int i=1;i<5;i++)

        {

        driver.findElement(By.id("hrefIncAdt")).click();

        }

        driver.findElement(By.id("btnclosepaxoption")).click();

        System.out.println(driver.findElement(By.id("divpaxinfo")).getText());

    }

}

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Настоящая проблема здесь в том, что ChromeDriver действительно очень быстрый.В результате он пытается щелкнуть элемент до того, как Chrome завершит его рендеринг, и элемент еще не активен.

Правильное решение состоит в том, чтобы использовать явное ожидание, пока элемент станет активным, а затем нажатьЭто.Никогда не следует смешивать неявные и явные ожидания, поэтому, если вы решили использовать явные ожидания, придерживайтесь их (это лучшая практика).

Я добавил полный набор переработанного кода, вам действительно нужно толькодобавьте ожидание WebDriver и настройте ваш цикл, хотя.

driver.get("http://spicejet.com");
driver.findElement(By.id("divpaxinfo")).click();

System.out.println(driver.findElement(By.id("divpaxinfo")).getText());

WebDriverWait wait = new WebDriverWait(driver, 15, 50);
for (int i = 1; i < 5; i++) {
    wait.until(ExpectedConditions.elementToBeClickable(By.id("hrefIncAdt"))).click();
}

driver.findElement(By.id("btnclosepaxoption")).click();

System.out.println(driver.findElement(By.id("divpaxinfo")).getText());

Это явно ожидает, когда элемент, на который вы хотите щелкнуть, будет кликабельным, прежде чем вы нажмете на него, это лучше, чем видимость, потому что элементможет быть видимым, но не активным.

0 голосов
/ 28 февраля 2019

Добавление неявного кода ожидания и максимизации браузера. Сразу после создания экземпляра драйвера выполните следующие действия:

WebDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
driver.manage().window().maximize();

Предложение: Добавьте некоторое ожидание (неявное / свободное)в скрипте для правильного выполнения

Ваша программа с улучшениями:

package practice;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
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;

import java.util.concurrent.TimeUnit;

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

        System.setProperty("webdriver.chrome.driver","src\\main\\resources\\drivers\\win\\chromedriver.exe");

        WebDriver driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
        driver.manage().window().maximize();

        driver.get("http://spicejet.com");

        WebDriverWait wait=new WebDriverWait(driver, 20);
        WebElement element =wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("divpaxinfo")));
        element.click();
        System.out.println(driver.findElement(By.id("divpaxinfo")).getText());

        WebElement element1 =wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("hrefIncAdt")));
        for(int i=1;i<5;i++){
            element1.click();
        }

        driver.findElement(By.id("btnclosepaxoption")).click();
        System.out.println(driver.findElement(By.id("divpaxinfo")).getText());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...