如何在Selenium Web Driver中重定向之前验证是否正在打开单击的URL?

时间:2016-03-23 09:48:54

标签: java selenium selenium-webdriver

我正在使用Selenium Java WebDriver来创建我的测试。我尝试自动化的测试如下: 1)从CSS元素I中获取URL,并将其悬停在上面。 2)单击该元素(它是一个链接)。 3)确认打开的URL是预期的。

如果打开的URL实际上与步骤1中获得的URL相同,则步骤3会很容易。但是,我的案例中的URL会被重定向,直到它最终打开,因此我的测试用例失败。

我目前的实施: 1)使用这种方法,我得到了URL:

    public String getHrefFromElement(String selector) {
    return driver.findElement(By.cssSelector(selector)).getAttribute("href");
}

2)我在选择器上单击此方法:

    public void click(String selector) {
    driver.findElement(By.cssSelector(selector)).click();
}

3)点击后我获取当前URL并编写基本断言,用于比较#1中的元素获取中的Href与当前URL(它会失败)。

    public String getCurrentURL() {
    return driver.getCurrentUrl();
}

问题: 如果点击URL被重定向,我可以在重定向之前以某种方式验证URL是否被打开? 如何在页面加载之前从重定向开始之前获取URL状态?

4 个答案:

答案 0 :(得分:0)

您需要添加等待以确保页面已加载(并且重定向已完成)。

我建议您阅读一些关于Page Object模式/测试方法的内容,因为它有助于轻松地抽象出来。

答案 1 :(得分:0)

您应该向窗口URL添加事件侦听器。这样,每次更改时,您都可以将其与代码中的存储值进行比较。

答案 2 :(得分:0)

以上评论是正确的,我想为其添加更多信息。

您可以尝试向您的代码添加侦听器,只有这个问题才能帮助您。

我使用C#运行我的测试,所以我真的不知道Java中的所有内容,但希望这会对你有用https://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/support/events/EventFiringWebDriver.html

您需要做的是创建一个类,您将添加“Element Clicked”,“Navigation”和“Element Found”等事件监听器。

有了这个,你就可以在“导航”活动中做一些动作。它将帮助您获取正在导航的URL。

在C#上我的听众看起来像:

public static void Navigating(object sender, WebDriverNavigationEventArgs e)
{
     Console.WriteLine("Will navigate to " + e.Url);
}

答案 3 :(得分:0)

你可以尝试这样下面我以谷歌主页(搜索页面)为例展示了我的答案

import java.util.List;
import java.util.concurrent.TimeUnit;

import org.omg.Messaging.SyncScopeHelper;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import junit.framework.Assert;

public class WalmartDatePicker {

    @SuppressWarnings("deprecation")
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        System.getProperty("webdriver.chrome.driver","C:\\Users\\rajnish\\Desktop\\ImpFolder\\SeleniumJar\\chromedriver_win32 (1)");
        WebDriver driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        driver.get("https://www.google.com");

        // finding all urls on the google home page :

        List<WebElement> alllink = driver.findElements(By.tagName("a"));

        for(int i = 0 ;i<alllink.size();i++){
            // printing links present on th egoogle home page.
            if(alllink.get(i).isDisplayed() == true){
                String urlp = alllink.get(i).getAttribute("href");
                System.out.println("Links are : " + urlp );
                // now click link one by one 
                alllink.get(i).click();
                // after clicking we move to the url 
                // here we can do two things to verify 

                // 1. verify title of the page and navigate back. 
                /* System.out.println(driver.getTitle());
                 Assert.assertEquals(driver.getTitle(), driver.getTitle());
                 driver.navigate().back();*/

                //2 verify before url with current opened url
                 Assert.assertEquals(urlp, driver.getCurrentUrl());

                 alllink = driver.findElements(By.tagName("a"));
            }
        }
    }
}