import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedConditions;
import java.util.List;
public class Main {
public static void main(String[] args) {
Test02();
}
private static void Test02() {
// 设置系统属性,指定chromedriver的路径(如果需要)
// System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
WebDriver webDriver = new ChromeDriver();
try {
// 打开百度首页
webDriver.get("https://www.baidu.com");
// 找到搜索输入框
WebElement searchInput = webDriver.findElement(By.id("kw"));
// 向输入框中输入“软件测试”
searchInput.sendKeys("软件测试");
// 找到并点击“百度一下”
WebElement baiduButton = webDriver.findElement(By.id("su"));
baiduButton.click();
// 使用WebDriverWait等待搜索结果出现
WebDriverWait wait = new WebDriverWait(webDriver, 10);
// 注意:这里的选择器可能需要根据实际页面结构进行调整
// 假设搜索结果中的链接被包裹在<h3 class="t"><a>标签中
List<WebElement> searchResults = wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("h3.t a")));
// 遍历搜索结果,检查是否包含“软件测试”
boolean found = false;
for (WebElement result : searchResults) {
if (result.getText().contains("软件测试")) {
System.out.println("测试通过,找到相关搜索结果");
found = true;
break; // 找到后退出循环
}
}
if (!found) {
System.out.println("测试不通过,未找到相关搜索结果");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭浏览器
if (webDriver != null) {
webDriver.quit();
}
}
}
}
当然可以,以下是对您提供的代码的详细讲解:
引入依赖
首先,代码通过import
语句引入了Selenium WebDriver库中的相关类和接口,这些类和接口是自动化测试脚本与浏览器交互的基础。
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedConditions;
import java.util.List;
主类和主方法
Main
类包含了一个main
方法,这是Java程序的入口点。main
方法调用了Test02
方法,执行测试逻辑。
测试方法 Test02
初始化WebDriver
- 实例化
ChromeDriver
对象作为WebDriver
的实例,用于控制Chrome浏览器。这里假设ChromeDriver的路径已经配置在系统的环境变量中,或者通过System.setProperty
显式设置。
打开网页
- 使用
webDriver.get("https://www.baidu.com")
打开百度首页。
定位并操作页面元素
- 使用
findElement(By.id("kw"))
定位到搜索输入框,并发送“软件测试”作为搜索关键词。 - 使用
findElement(By.id("su"))
定位到“百度一下”按钮,并执行点击操作。
等待搜索结果
- 实例化
WebDriverWait
对象,并设置等待时间为10秒。这是为了确保在搜索结果出现之前,脚本会暂停执行,等待页面加载完成。 - 使用
ExpectedConditions.visibilityOfAllElementsLocatedBy
方法结合CSS选择器h3.t a
来等待所有搜索结果链接变为可见状态。这假设搜索结果中的每个链接都被<h3 class="t"><a>
标签包裹。
遍历并检查搜索结果
- 遍历搜索结果列表,检查每个链接的文本是否包含“软件测试”。
- 如果找到匹配的搜索结果,则打印“测试通过,找到相关搜索结果”,并将
found
变量设置为true
,然后退出循环。 - 如果遍历完所有结果都没有找到匹配的文本,则打印“测试不通过,未找到相关搜索结果”。
异常处理和资源清理
- 使用
try-catch
块捕获并打印可能发生的任何异常,以便调试。 - 在
finally
块中,检查webDriver
对象是否不为null
,并调用quit
方法关闭浏览器,释放资源。
注意事项
- 确保ChromeDriver与您的Chrome浏览器版本兼容。
- 如果ChromeDriver的路径没有配置在系统的环境变量中,您需要使用
System.setProperty
显式设置。 - CSS选择器
h3.t a
可能需要根据实际页面结构进行调整。 - 如果搜索结果页面使用了JavaScript动态加载内容,那么
WebDriverWait
是确保内容完全加载的关键。 ExpectedConditions
提供了多种等待条件,可以根据需要选择合适的条件。