我正在使用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状态?
答案 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"));
}
}
}
}