使用Java的Selenium Web驱动程序代码无法浏览网站

时间:2019-02-28 17:10:22

标签: selenium google-chrome internet-explorer webdriver

我在Eclipse中有以下代码。我正在尝试在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 :(得分:0)

添加隐式等待和浏览器最大化代码,如下所示创建驱动程序实例:

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());
    }
}

答案 1 :(得分:0)

这里的真正问题是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());

这明确地等待您要单击的元素在单击之前可以单击,这比可见性更好,因为元素可见但不单击。