1.京东
一个是eclipse上的代码,一个是idea上的代码,idea上用的junit5框架。
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
public class Example_jd {
public static void test(WebDriver driver) throws InterruptedException {
// TODO Test script
// eg:driver.get("https://www.baidu.com/")
// eg:driver.findElement(By.id("wd"));
// 3.加载浏览器
// 4.通过chromeDriver打开浏览器
// chromeDriver.get("https://www.baidu.com/");
driver.get("https://www.jd.com/");
Thread.sleep(1500);
driver.manage().window().maximize();
Thread.sleep(1000);
// 1. 打开京东官网首页,选择城市为台湾
Actions actions = new Actions(driver);
WebElement city = driver.findElement(By.id("ttbar-mycity"));
actions.moveToElement(city).perform();
Thread.sleep(1500);
driver.findElement(By.linkText("台湾")).click();
Thread.sleep(1000);
// 2 .搜索框输入“家具”并搜索
driver.findElement(By.id("key")).sendKeys("家具");
Thread.sleep(1500);
driver.findElement(By.xpath("//*[@id=\"search\"]/div/div[2]/button")).click();
Thread.sleep(1500);
//
driver.findElement(By.id("loginname")).sendKeys("lcc聪聪", Keys.TAB, "lcc20040220");
Thread.sleep(1000);
driver.findElement(By.id("loginsubmit")).click();
Thread.sleep(20000);
//
// driver.findElement(By.id("key")).sendKeys("家具");
// driver.findElement(By.xpath("//*[@id=\"search\"]/div/div[2]/button")).click();
// Thread.sleep(1500);
// 3 .选择【源氏木语】
driver.findElement(By.linkText("源氏木语")).click();
Thread.sleep(1000);
// 4 .选择【边桌/茶几】
driver.findElement(By.linkText("边桌/茶几")).click();
Thread.sleep(1000);
// 5.选择【111-120cm】
driver.findElement(By.linkText("111-120cm")).click();
Thread.sleep(1000);
// 6.选择【实木】
driver.findElement(By.linkText("实木")).click();
Thread.sleep(1000);
// 7.选择【可储物】
driver.findElement(By.linkText("可储物")).click();
Thread.sleep(1000);
// 8. 按顺序点击【新品】【综合】【销量】【评论数】
driver.findElement(By.linkText("新品")).click();
driver.navigate().refresh();
Thread.sleep(1000);
driver.findElement(By.linkText("综合")).click();
driver.navigate().refresh();
Thread.sleep(1000);
driver.findElement(By.linkText("销量")).click();
driver.navigate().refresh();
Thread.sleep(1000);
driver.findElement(By.linkText("评论数")).click();
driver.navigate().refresh();
Thread.sleep(1500);
// 9. 选择第一条信息
driver.findElement(By.xpath("//*[@id=\"warecard_10119671215230\"]")).click();
Thread.sleep(1500);
// 10.选择【茶几原木色1200*600*450mm】
driver.switchTo().window(driver.getWindowHandles().toArray()[1].toString());
driver.findElement(By.cssSelector("a[clstag='shangpin|keycount|product|yanse-1.2米茶几']")).click();
Thread.sleep(1500);
// JavascriptExecutor executor = (JavascriptExecutor) driver;
// executor.executeScript("window.scrollTo(0, 400)");
driver.findElement(By.xpath("//*[@id=\"detail\"]/div[1]/ul/li[2]")).click();
Thread.sleep(1500);
driver.findElement(By.xpath("//*[@id=\"detail\"]/div[1]/ul/li[5]")).click();
Thread.sleep(1500);
driver.findElement(By.xpath("//*[@id=\"detail\"]/div[1]/ul/li[6]")).click();
Thread.sleep(1500);
// 12.返回第一个窗口并选择【超市】
driver.switchTo().window(driver.getWindowHandles().toArray()[0].toString());
Thread.sleep(1500);
driver.findElement(By.linkText("超市")).click();
Thread.sleep(1500);
// 13.返回上层窗口并关闭上层窗口
driver.switchTo().window(driver.getWindowHandles().toArray()[2].toString());
driver.close();
Thread.sleep(1500);
// 14.跳转至【超市】页面,关闭【超市】页面
driver.switchTo().window(driver.getWindowHandles().toArray()[1].toString());
driver.close();
Thread.sleep(1500);
}
public static void main(String[] args) {
// Run main function to test your script.
System.setProperty("webdriver.chrome.driver", "C:\\google\\chrome-win64\\chrome-win64\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
try {
test(driver);
} catch (Exception e) {
e.printStackTrace();
} finally {
driver.quit();
}
}
}
package test;
import org.apache.commons.io.FileUtils;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.io.File;
import java.io.IOException;
import java.util.Set;
import java.util.concurrent.TimeUnit;
public class test_jd {
private WebDriver driver;
@BeforeEach
public void setUp(){
System.setProperty("webdriver.chrome.driver", "C:\\google\\chrome-win64\\chrome-win64\\chromedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--remote-allow-origins=*");
driver = new ChromeDriver(chromeOptions);
driver.get("https://www.jd.com/");
// 1. 打开网易首页,并最大化窗口
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//设置隐式等待时间为 10 秒,即在一定时间内如果元素没有出现,Selenium 会等待直到超时
}
//用于测试用户界面
@Test
public void testUI(){
takeScreenshot("testUI.png");
}
@Test
public void test_Click() throws InterruptedException {
// 1. 打开京东官网首页,选择城市为台湾
Actions actions = new Actions(driver);
WebElement city = driver.findElement(By.id("ttbar-mycity"));
actions.moveToElement(city).perform();
Thread.sleep(1500);
driver.findElement(By.linkText("台湾")).click();
Thread.sleep(1000);
takeScreenshot("01_taiWan.png");
// 2 .搜索框输入“家具”并搜索
driver.findElement(By.id("key")).sendKeys("家具");
Thread.sleep(1500);
driver.findElement(By.xpath("//*[@id=\"search\"]/div/div[2]/button")).click();
Thread.sleep(1500);
driver.findElement(By.id("loginname")).sendKeys("lcc聪聪", Keys.TAB, "lcc20040220");
Thread.sleep(1000);
driver.findElement(By.id("loginsubmit")).click();
Thread.sleep(20000);
takeScreenshot("02_search.png");
// 3 .选择【源氏木语】
driver.findElement(By.linkText("源氏木语")).click();
Thread.sleep(1000);
takeScreenshot("03_yuanShiMuYu.png");
// 4 .选择【边桌/茶几】
driver.findElement(By.linkText("边桌/茶几")).click();
Thread.sleep(1500);
takeScreenshot("04_bianZhuo.png");
// 5.选择【111-120cm】
driver.findElement(By.linkText("111-120cm")).click();
Thread.sleep(1500);
takeScreenshot("05_111-120cm.png");
// 6.选择【实木】
driver.findElement(By.linkText("实木")).click();
Thread.sleep(1500);
takeScreenshot("06_shuMu.png");
// 7.选择【可储物】
driver.findElement(By.linkText("可储物")).click();
Thread.sleep(1000);
takeScreenshot("07_keCunWu.png");
// 8. 按顺序点击【新品】【综合】【销量】【评论数】
driver.findElement(By.linkText("新品")).click();
driver.navigate().refresh();
Thread.sleep(1000);
takeScreenshot("08_1xinPin,png");
driver.findElement(By.linkText("综合")).click();
driver.navigate().refresh();
Thread.sleep(1000);
takeScreenshot("08_2zongHe.png");
driver.findElement(By.linkText("销量")).click();
driver.navigate().refresh();
Thread.sleep(1000);
takeScreenshot("08_3xiaoLiang.png");
driver.findElement(By.linkText("评论数")).click();
driver.navigate().refresh();
Thread.sleep(1500);
takeScreenshot("08_4pingLunShu.png");
Thread.sleep(1500);
// 9. 选择第一条信息
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement firstMassage = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@target='_blank' and @title='源氏木语11.11抢先购,10.21号20点开启~享店铺满减~店铺券优惠~部分产品优惠百元~1.35*2M低铺实木床到手1239元起']")));
firstMassage.click();
Thread.sleep(1500);
takeScreenshot("09_message.png");
// 10.选择【茶几原木色1200*600*450mm】
driver.switchTo().window(driver.getWindowHandles().toArray()[1].toString());
driver.findElement(By.cssSelector("a[clstag='shangpin|keycount|product|yanse-茶几原木色1200*600*450mm']")).click();
Thread.sleep(1500);
takeScreenshot("10_yuanMuSe.png");
// JavascriptExecutor executor = (JavascriptExecutor) driver;
// executor.executeScript("window.scrollTo(0, 400)");
driver.findElement(By.xpath("//*[@id=\"detail\"]/div[1]/ul/li[2]")).click();
Thread.sleep(1500);
takeScreenshot("11_choice1.png");
driver.findElement(By.xpath("//*[@id=\"detail\"]/div[1]/ul/li[5]")).click();
Thread.sleep(1500);
takeScreenshot("11_choice2.png");
driver.findElement(By.xpath("//*[@id=\"detail\"]/div[1]/ul/li[6]")).click();
Thread.sleep(1500);
takeScreenshot("11_choice3.png");
// 12.返回第一个窗口并选择【超市】
driver.switchTo().window(driver.getWindowHandles().toArray()[0].toString());
driver.findElement(By.linkText("超市")).click();
driver.switchTo().window(driver.getWindowHandles().toArray()[1].toString());
Thread.sleep(3000);
takeScreenshot("12_supermarket.png");
// 13.返回上层窗口并关闭上层窗口
driver.switchTo().window(driver.getWindowHandles().toArray()[2].toString());
Thread.sleep(2000);
takeScreenshot("13_return.png");
driver.close();
Thread.sleep(2000);
// 14.跳转至【超市】页面,关闭【超市】页面
// driver.switchTo().window(driver.getWindowHandles().toArray()[1].toString());
// driver.close();
// takeScreenshot("14_close.png");
// Thread.sleep(1500);
Set<String> windowHandles = driver.getWindowHandles();//取当前所有打开的浏览器窗口句柄,并将它们存储在一个Set集合中。每个窗口句柄都是一个唯一的字符串,代表一个窗口。
String mainWindowHandle = windowHandles.iterator().next();//获取集合中的第一个窗口句柄,并将其赋值给变量mainWindowHandle
windowHandles.remove(mainWindowHandle); // 从集合中移除主窗口的句柄。这样,集合中就只剩下非主窗口的句柄
for (String handle : windowHandles) { //遍历集合中剩余的每个窗口句柄
driver.switchTo().window(handle); //切换到当前循环中的窗口句柄对应的窗口
driver.switchTo().window(mainWindowHandle);//次切换到非主窗口后,又立即切换回主窗口。这可能是为了确保在关闭非主窗口之前,主窗口仍然是活动的
}
takeScreenshot("14_closeSuperMarket.png");
driver.close();
}
@AfterEach
public void teardown() throws InterruptedException{
Thread.sleep(2000);
driver.quit();
}
private void takeScreenshot(String fileName) {
File screenshotFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
String projectPath = System.getProperty("user.dir"); // 获取项目根目录路径
File destFile = new File(projectPath + File.separator + fileName);
try {
FileUtils.copyFile(screenshotFile, destFile);
System.out.println("Screenshot saved: " + destFile.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
}
}
第三种:
其实linkText查边桌茶几也是可以的。
在软件测试中,CSS选择器主要用于自动化测试工具,如Selenium WebDriver,来定位和操作网页元素。这些选择器允许测试脚本精确地找到页面上的特定元素,以便进行点击、输入文本、检查属性等操作。以下是一些在自动化测试中使用CSS选择器的基本步骤和示例:
### 1. 定位元素
在自动化测试脚本中,首先需要定位到你想要操作的元素。例如,如果你想要点击一个按钮,你需要先找到这个按钮的元素。```javascript
// 使用Selenium WebDriver定位元素
var button = driver.findElement(By.cssSelector("#myButton"));
```### 2. 执行操作
一旦定位到元素,就可以对其执行各种操作。例如,点击按钮、输入文本、检查元素属性等。```javascript
// 点击按钮
button.click();// 输入文本
var inputField = driver.findElement(By.cssSelector("#myInput"));
inputField.sendKeys("Hello, World!");// 检查元素属性
var element = driver.findElement(By.cssSelector(".my-class"));
var attributeValue = element.getAttribute("title");
```### 3. 断言和验证
在测试中,你可能需要验证某些条件是否满足,比如元素是否可见、是否包含特定文本等。```javascript
// 检查元素是否可见
var isVisible = driver.findElement(By.cssSelector(".my-class")).isDisplayed();// 检查元素是否包含特定文本
var elementText = driver.findElement(By.cssSelector("#myElement")).getText();
assert.include(elementText, "Expected Text");
```### 4. 使用CSS选择器的技巧
- **使用ID选择器**:`#myId`,用于定位具有特定ID的元素。
- **使用类选择器**:`.myClass`,用于定位具有特定类的元素。
- **使用属性选择器**:`[type="text"]`,用于定位具有特定属性值的元素。
- **使用组合选择器**:`div p`,用于定位嵌套元素。
- **使用伪类选择器**:`:hover`,用于定位特定状态下的元素。### 注意事项
- **确保选择器的唯一性**:尽量使用能够唯一确定元素的选择器,以避免定位错误。
- **选择器的灵活性**:在可能的情况下,使用更通用的选择器,以便在页面结构发生变化时,测试脚本仍然有效。
- **避免使用过于复杂的CSS选择器**:过于复杂的CSS选择器可能会导致定位失败,尤其是在页面结构发生变化时。通过这些步骤,你可以有效地使用CSS选择器来定位和操作网页元素,从而实现自动化测试的目的。如果你有更具体的场景或问题,欢迎继续提问!
package org.example;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.interactions.Actions;
import java.util.ArrayList;
import java.util.Set;
public class Example {
public static void test(WebDriver driver) throws InterruptedException {
driver.get("https://www.jd.com/");
driver.findElement(By.className("style-red")).click();
Set<String> winds0 = driver.getWindowHandles();//这行代码获取当前浏览器中所有窗口的句柄(handle),并将它们存储在一个Set集合中。getWindowHandles()方法返回一个包含当前浏览器中所有窗口句柄的集合
ArrayList<String> list_win0 = new ArrayList<>(winds0);//这行代码将Set集合转换为ArrayList。由于Set集合不允许重复元素,它适合存储窗口句柄,因为每个窗口句柄都是唯一的。ArrayList则允许通过索引访问元素,这在后续操作中非常有用
driver.switchTo().window(list_win0.get(list_win0.size() - 1));//这行代码使用switchTo().window()方法切换到指定的窗口。list_win0.get(list_win0.size() - 1)获取ArrayList中的最后一个元素,即最后一个窗口的句柄。size() - 1是因为集合的索引是从0开始的,所以最后一个元素的索引是集合大小减1
driver.findElement(By.name("loginname")).sendKeys("19909284351");
driver.findElement(By.name("nloginpwd")).sendKeys("han123456");
driver.findElement(By.id("loginsubmit")).click();
Thread.sleep(40000);
// Thread.sleep(30000);
System.out.println("登录完成。。。。。");
//地址切换到台湾
Actions actions = new Actions(driver);
actions.moveToElement(driver.findElement(By.id("areamini"))).perform();
Thread.sleep(1000);
driver.findElement(By.linkText("台湾")).click();
Thread.sleep(1500);
// driver.findElement(By.name("loginname")).sendKeys("19909284351");
// driver.findElement(By.name("nloginpwd")).sendKeys("han123456");
// Thread.sleep(40000);
//搜索框中输入家具并点击搜索
driver.findElement(By.id("key")).sendKeys("家具");
Thread.sleep(1000);
driver.findElement(By.xpath("//*[@id=\"search\"]/div/div[2]/button")).click();
Thread.sleep(1500);
//选择源氏木语
driver.findElement(By.linkText("源氏木语")).click();
Thread.sleep(1500);
//选择【边桌/茶几】
//*[@id="J_selector"]/div[7]/div/div[2]/div[1]/ul/li[1]/a
driver.findElement(By.xpath("//a[@title='边桌/茶几']")).click();
Thread.sleep(1500);
//选择111-120cm
driver.findElement(By.linkText("111-120cm")).click();
Thread.sleep(1500);
//*[@id="loginsubmit"]
// <a href="javascript:;" class="btn-img btn-entry" id="loginsubmit" tabindex="6" _submit="true" clstag="pageclick|keycount|passport_main|click_login_submit_button" style="outline: rgb(109, 109, 109) none 0px;">登 录</a>
//选择实木
// driver.findElement(By.xpath("//*[@id=\"J_selector\"]/div[1]/div/div[2]/div[1]/ul/li[2]/a")).click();
driver.findElement(By.linkText("实木")).click();
Thread.sleep(1500);
//选择可储物
// driver.findElement(By.xpath("/html/body/div[5]/div[2]/div[1]/div[3]/div/div[2]/div[1]/ul/li[1]/a")).click();
driver.findElement(By.linkText("可储物")).click();
Thread.sleep(15000);
//按顺序点击【新品】【综合】【销量】【评论数】
// Thread.sleep(150000);
driver.findElement(By.xpath("//*[@id=\"J_filter\"]/div[1]/div[1]/a[4]")).click();
Thread.sleep(5000);
driver.findElement(By.xpath("//*[@id=\"J_filter\"]/div[1]/div[1]/a[1]")).click();
Thread.sleep(5000);
driver.findElement(By.xpath("//*[@id=\"J_filter\"]/div[1]/div[1]/a[2]")).click();
Thread.sleep(5000);
driver.findElement(By.xpath("//*[@id=\"J_filter\"]/div[1]/div[1]/a[3]")).click();
System.out.println("排序点击完毕。。。");
Thread.sleep(10000);
//选择第一条商品
//*[@id="warecard_100036496249"]/div[1]/a/img
// driver.findElement(By.xpath("//div[@id='warecard_100036496249']/div[1]/a/img")).click();
driver.findElement(By.cssSelector("#J_goodsList .p-img a")).click();
// driver.findElement()
// <img width="220" height="220" data-img="1" data-lazy-img="done" source-data-lazy-img="" src="//img14.360buyimg.com/n7/jfs/t1/217558/39/45391/145095/6710d474F4b46b37e/17da7859224a928f.jpg.avif">
Thread.sleep(1500);
//选择【茶几原木色1200*600*450mm】
Set<String> winds1 = driver.getWindowHandles();
ArrayList<String> list_win1 = new ArrayList<>(winds1);
driver.switchTo().window(list_win1.get(list_win1.size() - 1));
driver.findElement(By.xpath("//*[@id=\"choose-attr-1\"]/div[2]/div[2]/a")).click();
//依次选择【包装与规格】【售后保障】【商品评价】
actions.sendKeys(Keys.PAGE_DOWN).perform();
// actions.sendKeys(Keys.PAGE_DOWN).perform();
driver.findElement(By.xpath("//*[@id=\"detail\"]/div[1]/ul/li[2]")).click();
driver.findElement(By.linkText("售后保障")).click();
driver.findElement(By.xpath("//*[@id=\"detail\"]/div[1]/ul/li[5]")).click();
Thread.sleep(1500);
//返回第一个窗口并选择【超市】
Set<String> winds2 = driver.getWindowHandles();
ArrayList<String> list_win2 = new ArrayList<>(winds2);
driver.switchTo().window(list_win2.get(list_win2.size() - 2));
driver.findElement(By.className("b")).click();
//返回源氏木语并关闭
Set<String> winds3 = driver.getWindowHandles();
ArrayList<String> list_win3 = new ArrayList<>(winds3);
driver.switchTo().window(list_win3.get(list_win3.size() - 1));
System.out.println(driver.getTitle());
driver.close();
Thread.sleep(1500);
//跳转到超市页面并关闭
Set<String> winds4 = driver.getWindowHandles();
ArrayList<String> list_win4 = new ArrayList<>(winds4);
driver.switchTo().window(list_win4.get(list_win4.size() - 1));
driver.close();
}
public static void main(String[] args) {
// WebDriver driver = new ChromeDriver();
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--remote-allow-origins=*");
WebDriver driver = new ChromeDriver(chromeOptions);
try {
test(driver);
} catch (Exception e) {
e.printStackTrace();
} finally {
driver.quit();
}
}
}
每次都是把所有的窗口的句柄先获得,上图中的每一获得都是当前的句柄个数
2.网易
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class Example_wy {
public static void test(WebDriver driver) throws InterruptedException {
// TODO Test script
// eg:driver.get("https://www.baidu.com/")
// eg:driver.findElement(By.id("wd"));
// 3.加载浏览器
// 4.通过chromeDriver打开浏览器https://www.jd.com/
// chromeDriver.get("https://www.baidu.com/");
driver.get("https://www.163.com/");
Thread.sleep(1500);
driver.manage().window().maximize();
Thread.sleep(1500);
// 2. 选择【家居】并做【点击】操作
driver.findElement(By.linkText("家居")).click();
driver.switchTo().window(driver.getWindowHandles().toArray()[1].toString());
Thread.sleep(1000);
// 3. 选择【设计师】并做【点击】操作
driver.findElement(By.linkText("设计师")).click();
driver.switchTo().window(driver.getWindowHandles().toArray()[2].toString());
Thread.sleep(1500);
// 4. 选择【家装案例】并做【点击】操作
driver.findElement(By.linkText("家装案例")).click();
driver.switchTo().window(driver.getWindowHandles().toArray()[3].toString());
Thread.sleep(3000);
// 5. 选择【户型】并做【点击】操作
JavascriptExecutor executor = (JavascriptExecutor) driver;
// executor.executeScript("window.scrollTo(0, 600)");
// Thread.sleep(1500);
driver.findElement(By.xpath("//*[@id=\"ne_wrap\"]/body/div[9]/span[2]")).click();
Thread.sleep(1500);
// 6. 选择【三居室】并做【点击】操作
driver.findElement(By.xpath("//*[@id=\"ne_wrap\"]/body/div[10]/div[2]/div/span[6]")).click();
Thread.sleep(1500);
// 7. 选择【搜索】并做【点击】操作
driver.findElement(By.xpath("//*[@id=\"ne_wrap\"]/body/div[9]/span[4]")).click();
Thread.sleep(1500);
// 8. 选择【输入框】并做【输入】操作,输入内容为【现代】
driver.findElement(By.cssSelector("input[placeholder='请输入关键词']")).sendKeys("现代");
Thread.sleep(1500);
// 9. 选择确认【搜索】并做【点击】操作
// driver.findElement(By.xpath("//*[@id=\"ne_wrap\"]/body/div[10]/div[4]/div/div")).click();
driver.findElement(By.className("search")).click();
Thread.sleep(1500);
// 10.关闭当前【页面】选择并移至如图所示【页面】
driver.close();
driver.switchTo().window(driver.getWindowHandles().toArray()[2].toString());
Thread.sleep(1500);
// 11.选择【严选】并做【点击】操作
driver.findElement(By.id("js_lofter_icon_url")).click();
driver.switchTo().window(driver.getWindowHandles().toArray()[3].toString());
Thread.sleep(1500);
// 12.选择【数码家电】并做【点击】操作
driver.findElement(By.linkText("数码家电")).click();
driver.switchTo().window(driver.getWindowHandles().toArray()[4].toString());
Thread.sleep(1500);
// 13.选择【品质尖货】并做【点击】操作
driver.findElement(By.linkText("品质尖货")).click();
Thread.sleep(1500);
// 14.选择【澳门】并做【点击】操作
driver.findElement(By.linkText("澳门")).click();
Thread.sleep(1500);
// 15.选择【价格由高到低小箭头】并做【点击】操作
driver.findElement(By.xpath("//*[@id=\"j-goodsAreaWrap\"]/div/div[2]/div[1]/div[3]/a[2]/div/i[2]")).click();
Thread.sleep(1500);
// 16.选择首条资源【图片】并做【点击】操作(注:页面如有变动,依然选择首张图片资源)
// executor.executeScript("window.scrollTo(0, 300)");
Thread.sleep(3000);
driver.findElement(By.xpath("//*[@id=\"j-goodsAreaWrap\"]/div/div[2]/div[2]/ul/li[1]/div/div/div[1]/a/div/img"))
.click();
driver.switchTo().window(driver.getWindowHandles().toArray()[5].toString());
Thread.sleep(1500);
// 17.选择【评价】并做【点击】操作
// executor.executeScript("window.scrollTo(0, 300)");
WebElement pingJia = driver.findElement(By.xpath("//*[@id=\"detailNavTab\"]/div/div/div/ul/li[2]/span"));
executor.executeScript("window.scrollTo(0, " + pingJia.getLocation().y + ")");
pingJia.click();
Thread.sleep(1500);
// 18.选择【追评】并做【点击】操作
driver.findElement(
By.xpath("//*[@id=\"j-app\"]/div/div[2]/div[3]/div[1]/div[2]/div[1]/ul/div[1]/li/div/div[2]/span[3]"))
.click();
Thread.sleep(1500);
// 19.选择【评价时间】并做【点击】操作
driver.findElement(By.xpath("//*[@id=\"j-app\"]/div/div[2]/div[3]/div[1]/div[2]/div[1]/ul/div[2]/div/a[2]"))
.click();
Thread.sleep(1500);
// 20.选择【回顶部】并做【点击】操作
driver.findElement(By.id("j-yx-fixedtoolGoTop")).click();
Thread.sleep(1500);
// 21.选择【输入框】并做【输入】操作,输入【香薰】
driver.findElement(By.name("searchInput")).sendKeys("香薰");
Thread.sleep(2000);
// 22.选择【搜索】并做【点击】操作
driver.findElement(By.xpath("//*[@id=\"j-yx-cp-m-top\"]/div[2]/div/div[3]/div[2]")).click();
Thread.sleep(2000);
// 23.选择【母婴亲子】并做【点击】操作
driver.findElement(By.xpath("//*[@id=\"j-searchContainer\"]/div/div/div/div[2]/div[1]/div[1]/div/a[1]"))
.click();
Thread.sleep(1500);
// 24.选择【价格输入框】并做【输入】操作,输入内容为【10】
driver.findElement(By.name("floorPrice")).sendKeys("10");
Thread.sleep(1500);
// 25.选择【价格输入框】并做【输入】操作,输入内容为【40】
driver.findElement(By.name("upperPrice")).sendKeys("40");
Thread.sleep(1500);
// 26.选择【确定】并做【点击】操作
driver.findElement(By.xpath("//*[@id=\"j-searchContainer\"]/div/div/div/div[2]/div[1]/div[2]/div/div[3]/a[1]"))
.click();
Thread.sleep(1500);
// 27.选择首条资源【图片】并做【点击】操作
driver.findElement(By.xpath(
"//*[@id=\"j-searchContainer\"]/div/div/div/div[2]/div[2]/div[1]/ul/li/div/div/div[1]/a/div/img"))
.click();
driver.switchTo().window(driver.getWindowHandles().toArray()[6].toString());
Thread.sleep(1500);
// 28.选择【收藏】并做【点击】操作
driver.findElement(By.className("w-collectZone")).click();
Thread.sleep(1500);
}
public static void main(String[] args) {
// Run main function to test your script.
System.setProperty("webdriver.chrome.driver", "C:\\google\\chrome-win64\\chrome-win64\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
try {
test(driver);
} catch (Exception e) {
e.printStackTrace();
} finally {
driver.quit();
}
}
}
package test;
import org.apache.commons.io.FileUtils;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
public class test163 {
private WebDriver driver;
@BeforeEach
public void setUp(){
System.setProperty("webdriver.chrome.driver", "D:\\RuanJian\\google\\chrome-win64\\chrome-win64\\chromedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--remote-allow-origins=*");
driver = new ChromeDriver(chromeOptions);
driver.get("https://www.163.com/");
// 1. 打开网易首页,并最大化窗口
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//设置隐式等待时间为 10 秒,即在一定时间内如果元素没有出现,Selenium 会等待直到超时
}
//用于测试用户界面
@Test
public void testUI(){
takeScreenshot("testUI.png");
}
@Test
public void test_Click() throws InterruptedException {
//2. 选择【家居】并做【点击】操作
driver.findElement(By.linkText("家居")).click();
driver.switchTo().window(driver.getWindowHandles().toArray()[1].toString());
takeScreenshot("01_jiaJu.png");
//3. 选择【设计师】并做【点击】操作
driver.findElement(By.linkText("设计师")).click();
driver.switchTo().window(driver.getWindowHandles().toArray()[2].toString());
takeScreenshot("02_sheJiShi.png");
//4. 选择【家装案例】并做【点击】操作
driver.findElement(By.linkText("家装案例")).click();
driver.switchTo().window(driver.getWindowHandles().toArray()[3].toString());
takeScreenshot("03_jiaZhang.png");
//5. 选择【户型】并做【点击】操作
JavascriptExecutor executor = (JavascriptExecutor) driver;
*[@id="ne_wrap"]/body/div[9]/span[2]
WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement huXing = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"ne_wrap\"]/body/div[9]/span[2]")));
executor.executeScript("window.scrollTo(0,700)"); // executor.executeScript("arguments[0].scrollIntoView(true);", huXing);
//executor.executeScript("Window.scrollTo(0," + huXing.getLocation().y + ")");
huXing.click();
takeScreenshot("04_huXing.png");
//6. 选择【三居室】并做【点击】操作
driver.findElement(By.xpath("//*[@id=\"ne_wrap\"]/body/div[10]/div[2]/div/span[6]")).click();
takeScreenshot("05_sanJiShi.png");
//7. 选择【搜索】并做【点击】操作
driver.findElement(By.xpath("//*[@id=\"ne_wrap\"]/body/div[9]/span[4]")).click();
takeScreenshot("06_souSuo.png");
//8. 选择【输入框】并做【输入】操作,输入内容为【现代】
//driver.findElement(By.xpath("//*[@id=\"ne_wrap\"]/body/div[10]/div[4]/div/input")).sendKeys("现代");
driver.findElement(By.cssSelector("input[placeholder='请输入关键词']")).sendKeys("现代");
takeScreenshot("07_xianDai.png");
//9. 选择确认【搜索】并做【点击】操作
//driver.findElement(By.xpath("//*[@id=\"ne_wrap\"]/body/div[10]/div[4]/div/div")).click();
driver.findElement(By.className("search")).click();
Thread.sleep(2000);
takeScreenshot("08_queRen.png");
//10.关闭当前【页面】选择并移至如图所示【页面】
driver.close();
driver.switchTo().window(driver.getWindowHandles().toArray()[2].toString());
Thread.sleep(2000);
takeScreenshot("09_close.png");
//11.选择【严选】并做【点击】操作
driver.findElement(By.id("js_lofter_icon_url")).click();
//driver.findElement(By.xpath("//*[@id=\"js_lofter_icon_url\"]")).click();
driver.switchTo().window(driver.getWindowHandles().toArray()[3].toString());
takeScreenshot("10_yanXuan.png");
Thread.sleep(1500);
//12.选择【数码家电】并做【点击】操作
driver.findElement(By.linkText("数码家电")).click();
driver.switchTo().window(driver.getWindowHandles().toArray()[4].toString());
takeScreenshot("11_shuMa.png");
//13.选择【品质尖货】并做【点击】操作
driver.findElement(By.linkText("品质尖货")).click();
takeScreenshot("12_pinZhi.png");
//14.选择【澳门】并做【点击】操作
driver.findElement(By.linkText("澳门")).click();
takeScreenshot("13_aoMen.png");
//15.选择【价格由高到低小箭头】并做【点击】操作
driver.findElement(By.xpath("//*[@id=\"j-goodsAreaWrap\"]/div/div[2]/div[1]/div[3]/a[2]/div/i[2]")).click();
takeScreenshot("14_xiaoJianTou.png");
//16.选择首条资源【图片】并做【点击】操作(注:页面如有变动,依然选择首张图片资源)
// executor.executeScript("window.scrollTo(0, 300)");
Thread.sleep(6000);
driver.findElement(By.xpath("//*[@id=\"j-goodsAreaWrap\"]/div/div[2]/div[2]/ul/li[1]/div/div/div[1]/a/div/img")).click();
driver.switchTo().window(driver.getWindowHandles().toArray()[5].toString());
takeScreenshot("15_first.png");
//17.选择【评价】并做【点击】操作
//executor.executeScript("window.scrollTo(0, 300)");
WebElement pingJia = driver.findElement(By.xpath("//*[@id=\"detailNavTab\"]/div/div/div/ul/li[2]/span"));
executor.executeScript("window.scrollTo(0, " + pingJia.getLocation().y + ")");
pingJia.click();
Thread.sleep(1500);
takeScreenshot("16_pingJia.png");
//18.选择【追评】并做【点击】操作
driver.findElement(By.xpath("//*[@id=\"j-app\"]/div/div[2]/div[3]/div[1]/div[2]/div[1]/ul/div[1]/li/div/div[2]/span[3]")).click();
Thread.sleep(2000);
takeScreenshot("17_zhuiPing.png");
//19.选择【评价时间】并做【点击】操作
//driver.findElement(By.xpath("//*[@id=\"j-app\"]/div/div[2]/div[3]/div[1]/div[2]/div[1]/ul/div[2]/div/a[2]")).click();
WebElement pingJiaShiJian = driver.findElement(By.xpath("//*[@id=\"j-app\"]/div/div[2]/div[3]/div[1]/div[2]/div[1]/ul/div[2]/div/a[2]"));
//executor.executeScript("window.scrollTo(0, 600)");
pingJiaShiJian.click();
takeScreenshot("18_pingJiaShiJian.png");
//20.选择【回顶部】并做【点击】操作
Thread.sleep(5000);
driver.findElement(By.id("j-yx-fixedtoolGoTop")).click();
takeScreenshot("19_huiJingBu.png");
//
//21.选择【输入框】并做【输入】操作,输入【香薰】
WebElement input = wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("searchInput")));
input.sendKeys("香薰");
Thread.sleep(2000);
takeScreenshot("20_input.png");
//22.选择【搜索】并做【点击】操作
driver.findElement(By.xpath("//*[@id=\"j-yx-cp-m-top\"]/div[2]/div/div[3]/div[2]")).click();
Thread.sleep(2000);
takeScreenshot("21_search.png");
//23.选择【母婴亲子】并做【点击】操作
WebElement muYingQinZi = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"j-searchContainer\"]/div/div/div/div[2]/div[1]/div[1]/div/a[1]")));
muYingQinZi.click();
Thread.sleep(2000);
takeScreenshot("22_muYingCaoZuo.png");
//24.选择【价格输入框】并做【输入】操作,输入内容为【10】
driver.findElement(By.name("floorPrice")).sendKeys("10");
Thread.sleep(2000);
takeScreenshot("23_input1.png");
//25.选择【价格输入框】并做【输入】操作,输入内容为【40】
driver.findElement(By.name("upperPrice")).sendKeys("40");
Thread.sleep(2000);
takeScreenshot("24_input2.png");
//26.选择【确定】并做【点击】操作
driver.findElement(By.xpath("//*[@id=\"j-searchContainer\"]/div/div/div/div[2]/div[1]/div[2]/div/div[3]/a[1]")).click();
Thread.sleep(2000);
takeScreenshot("25_queDing.png");
//27.选择首条资源【图片】并做【点击】操作
driver.findElement(By.xpath("//*[@id=\"j-searchContainer\"]/div/div/div/div[2]/div[2]/div[1]/ul/li/div/div/div[1]/a/div/img")).click();
driver.switchTo().window(driver.getWindowHandles().toArray()[6].toString());
Thread.sleep(2000);
takeScreenshot("26_tuPian.png");
//28.选择【收藏】并做【点击】操作
WebElement shouCang = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"j-app\"]/div/div[2]/div[1]/div[2]/div[3]/div")));
shouCang.click();
takeScreenshot("27_shouCang.png");
//29.点个错查
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id=\"yx-widgetDialogContainer\"]/div[2]/div/div/div[1]/div"))).click();
WebElement shouCang2 = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id=\"j-app\"]/div/div[2]/div[1]/div[2]/div[3]/div/div[1]")));
shouCang.click();
Thread.sleep(2000);
takeScreenshot("28_shouCang.png");
}
@AfterEach
public void teardown() throws InterruptedException{
Thread.sleep(2000);
driver.quit();
}
private void takeScreenshot(String fileName) {
File screenshotFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
String projectPath = System.getProperty("user.dir"); // 获取项目根目录路径
File destFile = new File(projectPath + File.separator + fileName);
try {
FileUtils.copyFile(screenshotFile, destFile);
System.out.println("Screenshot saved: " + destFile.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
}
}