如何在 Selenium Web 驱动程序中重定向之前验证单击的 URL 是否已打开?

问题描述 投票:0回答:5

我正在使用 Selenium Java WebDriver 来创建我的测试。我试图自动化的测试如下: 1) 从我悬停的 CSS 元素获取 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 状态?

java selenium selenium-webdriver
5个回答
0
投票

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

我建议阅读一些有关页面对象模式/测试方法的内容,因为它将有助于轻松抽象。


0
投票

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


0
投票

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

您可以尝试在代码中添加侦听器,这只会对解决此问题有很大帮助。

我用 C# 运行测试,所以我不太了解 Java 中的所有内容,但希望这会对您有所帮助 https://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/支持/事件/EventFiringWebDriver.html.

您需要做的是创建一个类,在其中添加事件侦听器,例如“Element Clicked”、“Navigation”和“Element Found”等。

有了这个,您将能够在“导航”事件中执行一些操作。它将帮助您获取正在导航到的 URL。

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

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

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

0
投票

以上不起作用,因为原始问题是相同的

© www.soinside.com 2019 - 2024. All rights reserved.