Java 为什么Selenium在chrome浏览器中进行可视化验证时不打开单击的链接?
我正在运行SeleniumJava脚本来点击(几乎)网站上的所有链接。不过,当我观察运行中的chrome浏览器时,脚本运行得很好:并不是所有的链接都打开了正确的新网页。E不遵循顶部的六个菜单项 我评估了一些等待页面加载的方法,但在chrome观察中并没有区别。Selenium应该等待为自己加载正确的页面 这是我的java代码AppTest.java:Java 为什么Selenium在chrome浏览器中进行可视化验证时不打开单击的链接?,java,selenium,google-chrome,Java,Selenium,Google Chrome,我正在运行SeleniumJava脚本来点击(几乎)网站上的所有链接。不过,当我观察运行中的chrome浏览器时,脚本运行得很好:并不是所有的链接都打开了正确的新网页。E不遵循顶部的六个菜单项 我评估了一些等待页面加载的方法,但在chrome观察中并没有区别。Selenium应该等待为自己加载正确的页面 这是我的java代码AppTest.java: package de.auticon.website; import org.openqa.selenium.support.ui.Expect
package de.auticon.website;
import org.openqa.selenium.support.ui.ExpectedConditions;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.junit.Assert.*;
import org.junit.Assert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.List;
import java.util.concurrent.TimeUnit;
//import java.util.concurrent.TimeSpan;
import org.openqa.selenium.*;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.interactions.Action;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedCondition;
//import org.openqa.selenium.IJavaScriptExecutor;
//import org.openqa.selenium.IJavaScriptExecutor.ExecuteScript;
//import org.openqa.selenium.IWebDriver;
//import org.openqa.selenium.support.ui.IWait;
public class AppTest extends TestCase{
WebDriver driver = new ChromeDriver();
public void waitForPageLoaded() {
ExpectedCondition<Boolean> expectation = new
ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
return ((JavascriptExecutor) driver).executeScript("return document.readyState").toString().equals("complete");
}
};
try {
Thread.sleep(1000);
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(expectation);
} catch (Throwable error) {
Assert.fail("Timeout waiting for Page Load Request to complete.");
}
}
public void test_all_links() {
String baseUrl = "http://auticon.nepomedia-staging.de/";
System.setProperty("webdriver.chrome.driver","c:\\chromedriver_win32\\chromedriver.exe");
String underConsTitle = "not found";
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.get(baseUrl);
//show DSGVO:
WebElement we = driver.findElement(By.linkText("Datenschutzerklärung"));
Actions xAct = new Actions(driver);
xAct.moveToElement(we);
xAct.click();
xAct.perform();
if (driver.getTitle().equals(underConsTitle)) {
System.out.println("\"" + we + "\""
+ " is under construction.");
} else {
System.out.println("\"" + we + "\""
+ " is working.");
}
//driver.navigate().back();
driver.get(baseUrl);
//remove DSGVO banner:
we = driver.findElement(By.linkText("Ja, ich stimme zu"));
xAct = new Actions(driver);
xAct.moveToElement(we);
xAct.click();
xAct.perform();
//click_all_links:
//List<WebElement> linkElements = driver.findElements(By.tagName("a"));
//String[] linkTexts = new String[linkElements.size()];
//int i = 0;
//extract the link texts of each link element
//for (WebElement e : linkElements) {
//linkTexts[i] = e.getText();
//i++;
//}
//test each link
//for (String t : linkTexts) {
//if (!t.isEmpty()){
for (int i=0; true; i++)
{
List<WebElement> links = driver.findElements(By.tagName("a"));
if (i >= links.size())
break;
if(!links.get(i).getText().isEmpty())
{
//WebDriverWait wait = new WebDriverWait(driver, 10);
//WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(links.get(i)));
we = links.get(i);//driver.findElement(By.linkText(t));
System.out.println("\"" + links.get(i).getText() + "\"" );
xAct = new Actions(driver);
xAct.moveToElement(we);
xAct.click();
xAct.perform();
//IWait<IWebDriver> wait = new OpenQA.Selenium.Support.UI.WebDriverWait(driver, TimeSpan.FromSeconds(30.00));
//wait.Until(driver1 => ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete"));
waitForPageLoaded();
if (driver.getTitle().equals(underConsTitle)) {
System.out.println( " is under construction.");
} else {
//System.out.println("\"" + links.get(i).getText() + "\""
System.out.println( " is working.");
}
//driver.navigate().back();
driver.get(baseUrl);
}
}
driver.quit();
}
}
package de.auticon.website;
导入org.openqa.selenium.support.ui.ExpectedConditions;
导入junit.framework.Test;
导入junit.framework.TestCase;
导入junit.framework.TestSuite;
导入org.junit.Assert.*;
导入org.junit.Assert;
导入org.openqa.selenium.By;
导入org.openqa.selenium.WebDriver;
导入org.openqa.selenium.chrome.ChromeDriver;
导入java.util.List;
导入java.util.concurrent.TimeUnit;
//导入java.util.concurrent.TimeSpan;
导入org.openqa.selenium.*;
导入org.openqa.selenium.interactions.Actions;
导入org.openqa.selenium.interactions.Action;
导入org.openqa.selenium.support.ui.WebDriverWait;
导入org.openqa.selenium.support.ui.ExpectedCondition;
//导入org.openqa.selenium.IJavaScriptExecutor;
//导入org.openqa.selenium.IJavaScriptExecutor.ExecuteScript;
//导入org.openqa.selenium.IWebDriver;
//导入org.openqa.selenium.support.ui.IWait;
公共类AppTest扩展了TestCase{
WebDriver驱动程序=新的ChromeDriver();
public void waitForPageLoaded(){
预期条件预期=新
期望条件(){
公共布尔应用(WebDriver驱动程序){
return((JavascriptExecutor)driver.executeScript(“return document.readyState”).toString().equals(“complete”);
}
};
试一试{
睡眠(1000);
WebDriverWait wait=新的WebDriverWait(驱动程序,30);
等待,直到(期望);
}捕获(可丢弃错误){
Assert.fail(“等待页面加载请求完成的超时”);
}
}
public void test_all_links(){
字符串baseUrl=”http://auticon.nepomedia-staging.de/";
System.setProperty(“webdriver.chrome.driver”,“c:\\chromedriver\U win32\\chromedriver.exe”);
字符串undernstitle=“未找到”;
driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
get(baseUrl);
//显示DSGVO:
WebElement we=driver.findElement(By.linkText(“Datenschutzerklärung”);
动作xAct=新动作(驱动程序);
xAct.moveToElement(我们);
xAct.click();
xAct.perform();
如果(driver.getTitle().equals(underConsTitle)){
System.out.println(“\”+we+“\”)
+“正在建设中。”);
}否则{
System.out.println(“\”+we+“\”)
+“正在工作。”);
}
//driver.navigate().back();
get(baseUrl);
//删除DSGVO横幅:
we=driver.findElement(By.linkText(“Ja,ich stimme zu”);
xAct=新操作(驱动程序);
xAct.moveToElement(我们);
xAct.click();
xAct.perform();
//单击所有链接:
//List linkElements=driver.findElements(按.tagName(“a”));
//String[]LinkText=新字符串[linkElements.size()];
//int i=0;
//提取每个链接元素的链接文本
//对于(WebElement e:linkelement){
//linktext[i]=e.getText();
//i++;
//}
//测试每个链接
//对于(字符串t:LinkText){
//如果(!t.isEmpty()){
for(int i=0;true;i++)
{
列表链接=driver.findElements(按.tagName(“a”));
如果(i>=links.size())
打破
if(!links.get(i).getText().isEmpty())
{
//WebDriverWait wait=新的WebDriverWait(驱动程序,10);
//WebElement=wait.until(ExpectedConditions.visibilityOfElementLocated(links.get(i));
we=links.get(i);//driver.findElement(By.linkText(t));
System.out.println(“\”+links.get(i).getText()+“\”);
xAct=新操作(驱动程序);
xAct.moveToElement(我们);
xAct.click();
xAct.perform();
//IWait wait=new OpenQA.Selenium.Support.UI.WebDriverWait(驱动程序,TimeSpan.FromSeconds(30.00));
//wait.Until(driver1=>((IJavaScriptExecutor)driver.ExecuteScript(“return document.readyState”).Equals(“complete”);
waitForPageLoaded();
如果(driver.getTitle().equals(underConsTitle)){
System.out.println(“正在建设中”);
}否则{
//System.out.println(“\”+links.get(i).getText()+“\”)
System.out.println(“正在工作”);
}
//driver.navigate().back();
get(baseUrl);
}
}
driver.quit();
}
}
您可以一次获取所有链接,然后使用以下工具检查它们:
driver.get("http://auticon.nepomedia-staging.de/");
//get all links with href that start with http
ArrayList<String> links = (ArrayList) ((JavascriptExecutor) driver).executeScript("return [...document.querySelectorAll(\"a[href^='http']\")].map(e=>e.getAttribute('href'))");
links.forEach(link->{
driver.get(link);
//check here
});
driver.get(“http://auticon.nepomedia-staging.de/");
//使用href获取以http开头的所有链接
ArrayList链接=(ArrayList)((JavascriptExecutor)驱动程序).executeScript(“返回[…document.querySelectorAll(\“a[href^='http']\”)))。映射(e=>e.getAttribute('href'));
links.forEach(链接->{
获取(链接);
//检查h