【问题标题】:Selenium Web Driver code with Java not navigating the website带有 Java 的 Selenium Web 驱动程序代码无法浏览网站
【发布时间】:2019-07-22 16:13:03
【问题描述】:

我在 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());

    }

}

【问题讨论】:

  • 您能否尝试提供的答案,如果您有任何疑虑,请告诉我?

标签: selenium google-chrome internet-explorer webdriver


【解决方案1】:

在创建驱动实例后添加隐式等待和浏览器最大化代码如下:

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

【讨论】:

  • 您没有在代码示例中添加隐式或流畅的等待,您刚刚使用了 Thread.sleep,这是一种可怕的编码实践。最大化窗口也将毫无用处。
  • @Ardesco : Removed Thread.sleep... 测试了它工作正常的代码
  • 你真的不想混合隐式和显式等待,你处于未定义功能的领域。在混合这些等待类型时,不同的驱动程序二进制文件和不同版本的驱动程序二进制文件的工作方式略有不同。
【解决方案2】:

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

这会显式等待您想要点击的元素在您点击之前可点击,这是比可见性更好的检查,因为元素可以可见,但不可点击。

【讨论】:

    猜你喜欢
    • 2018-04-02
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 2017-07-19
    • 2018-03-05
    • 2017-07-09
    相关资源
    最近更新 更多