【问题标题】:java, selenium web driverjava,硒网络驱动程序
【发布时间】:2017-12-21 21:56:31
【问题描述】:

这是登录弹出窗口的快照:

我是 Selenium webdriver 的新手。我编写了这段代码来找出导航命令,但是一旦浏览器打开,就会显示一个登录弹出窗口。我尝试使用类名或 xpath 关闭它,但发生超时异常。

在这种情况下我需要使用显式等待吗?你能帮我找出问题所在吗?

public class TestNavigateCommands {
WebDriver driver;
public void invokeBrowser(){
    try {
        System.setProperty("webdriver.chrome.driver", "/Users/himaja/Documents/chromedriver");
        ChromeOptions options=new ChromeOptions();
        options.addArguments("start-fullscreen");
        driver=new ChromeDriver(options);
        driver.manage().deleteAllCookies();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS);
        navigateCommands();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
public void navigateCommands(){
    try {
        driver.navigate().to("https://www.flipkart.com/");
        Thread.sleep(4000);
        driver.findElement(By.className("2AkmmA _29YdH8")).click();
        //driver.findElement(By.xpath("//*[@class='_2AkmmA _29YdH8']")).click();
        driver.findElement(By.xpath("//span[starts-with(text(),'Applicances')]")).click();
        driver.findElement(By.xpath("//span[contains(text(),'Microwave Ovens')]")).click();
        Thread.sleep(2000);
        driver.navigate().back();
        Thread.sleep(2000);
        driver.navigate().forward();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }



}


public static void main(String[] args) {
    TestNavigateCommands test1= new TestNavigateCommands();
    test1.invokeBrowser();

}

}

例外:

[43.366][SEVERE]:从渲染器接收消息超时:37.150 [43.373][严重]:从渲染器接收消息超时:-0.007 org.openqa.selenium.TimeoutException: 超时

【问题讨论】:

  • 嗨 Himaja :) 你说的“没用”是什么意思?什么都没有发生?你有例外吗?屏幕上会弹出一只狗的 gif 并嘲笑你吗?
  • 我得到了超时异常。弹出窗口未关闭,其他功能未执行。
  • 您可以在您的问题中添加超时异常吗?这可能包含一些有价值的调试信息。
  • @Himaja,请更新您的 chromedriver 版本并重试
  • 你能用完整的错误堆栈跟踪和你看到异常的行来更新问题吗?

标签: java selenium webdriver


【解决方案1】:

试试这个代码可能会有所帮助:

public class TestNavigateCommands {
     public static void main(String[] args) throws InterruptedException {
            try {                
                  System.setProperty("webdriver.chrome.driver", "/Users/himaja/Documents/chromedriver");
                  WebDriver driver = new ChromeDriver();
                  driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
                  WebDriverWait wait=new WebDriverWait(driver,50 );

                  driver.manage().window().maximize();

                  driver.navigate().to("https://www.flipkart.com/");          
                  driver.findElement(By.xpath("//button[contains(@class,'YdH8')]")).click();   


                  wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//a[@title='Appliances']//span"))));
                  driver.findElement(By.xpath("//a[@title='Appliances']//span")).click();         

            } catch (Exception e) {
                e.printStackTrace();
            }           
        }   
    }

【讨论】:

  • 我试过这段代码,它有帮助。该页面花了很长时间加载,它终于工作了。感谢您的帮助。
【解决方案2】:
public class TestNavigateCommands {
WebDriver driver;

public void invokeBrowser() {
    try {
        System.setProperty("webdriver.chrome.driver", "/Users/himaja/Documents/chromedriver");
        ChromeOptions options = new ChromeOptions();
        options.addArguments("start-fullscreen");
        driver = new ChromeDriver(options);
        driver.manage().deleteAllCookies();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);
        navigateCommands();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public void navigateCommands() {
    try {
        driver.navigate().to("https://www.flipkart.com/");          
        driver.findElement(By.xpath("//div[@class='_3Njdz7']//button[@class='_2AkmmA _29YdH8']")).click();
        WebDriverWait wait = new WebDriverWait(driver, 30);
        wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//a[@title='Appliances']//span"))));
        driver.findElement(By.xpath("//a[@title='Appliances']//span")).click();         
        Thread.sleep(2000);
        driver.navigate().back();
        driver.navigate().forward();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

【讨论】:

  • 您能否正确格式化您的代码,并为答案添加一些上下文(即简要说明您的代码如何解决问题)?
  • 你能用这个代码试试看吗?如果您仍然遇到同样的问题,请告诉我。
  • 我仍然遇到同样的问题。同样的例外。
  • @Himaja:我已经更新了我的答案。请检查一下。在此,我将页面超时更改为 60 秒,并且在 navigateCommands() 中进行了一些更改
  • 我试过你的答案,但我仍然遇到同样的超时问题。我尝试使用 chrome 和 firefox 检查代码。有没有办法通过点击页面上的任意位置来禁用弹出窗口?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 2021-11-01
  • 2018-08-27
相关资源
最近更新 更多