我正在使用 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 状态?
您需要添加等待以确保页面已加载(并且重定向已完成)。
我建议阅读一些有关页面对象模式/测试方法的内容,因为它将有助于轻松抽象。
您应该向窗口 URL 添加事件侦听器。这样,每次更改时,您都可以将其与代码中存储的值进行比较。
上面的评论是正确的,我想添加更多信息。
您可以尝试在代码中添加侦听器,这只会对解决此问题有很大帮助。
我用 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);
}
你可以像下面这样尝试,我以谷歌主页(搜索页面)为例给出了我的答案
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"));
}
}
}
}
以上不起作用,因为原始问题是相同的