WebDriver API 实例详解(二)
十一、双击某个元素
被测试网页的html源码:
1 <html> 2 <head> 3 <meta charset="UTF-8"> 4 </head> 5 <body> 6 <input type="text" id="inputBox" 7 ondblclick="javascript:this.style.background='red'">请双击</input> 8 </body> 9 </html>
View Code
Java语言版本的API实例代码:
1 package test; 2 3 import org.testng.annotations.Test; 4 5 import org.testng.annotations.BeforeMethod; 6 7 import java.io.File; 8 9 import org.openqa.selenium.By; 10 import org.openqa.selenium.WebDriver; 11 import org.openqa.selenium.WebElement; 12 import org.openqa.selenium.chrome.ChromeDriver; 13 import org.openqa.selenium.interactions.Actions; 14 import org.testng.annotations.AfterMethod; 15 16 public class ChormeOpen { 17 WebDriver driver; 18 @Test 19 public void opentest() { 20 File file = new File(""); 21 System.out.println(file.getAbsolutePath()); 22 String url = file.getAbsolutePath() + "/html/" + "file3.html"; 23 driver.get(url); 24 System.out.println(driver.getCurrentUrl()); 25 // 26 WebElement inputBox = driver.findElement(By.id("inputBox")); 27 //声明Action对象 28 Actions builder = new Actions(driver); 29 //双击 30 builder.doubleClick(inputBox).build().perform(); 31 try { 32 Thread.sleep(3000); 33 } catch (InterruptedException e) { 34 // TODO Auto-generated catch block 35 e.printStackTrace(); 36 } 37 } 38 @BeforeMethod 39 public void beforeMethod() { 40 System.setProperty("webdriver.chrome.driver", "F:\\selenium\\chromedriver.exe"); 41 driver = new ChromeDriver(); 42 } 43 44 @AfterMethod 45 public void afterMethod() { 46 driver.quit(); 47 } 48 49 }
View Code
十二、操作单选下拉列表
被测试网页的html源码:
1 <html> 2 <head> 3 <meta charset="UTF-8"> 4 </head> 5 <body> 6 <select name="fruit" size="1"> 7 <option id="peach" value="taozi">桃子</option> 8 <option id="watermelon" value="xigua">西瓜</option> 9 <option id="orange" value="juzi">橘子</option> 10 <option id="kiwifruit" value="mihoutao">猕猴桃</option> 11 <option id="maybush" value="shanzha">山楂</option> 12 <option id="litchi" value="lizhi">荔枝</option> 13 </select> 14 </body> 15 </html>
View Code
Java语言版本的API实例代码:
1 package test; 2 3 import org.testng.annotations.Test; 4 5 import org.testng.annotations.BeforeMethod; 6 7 import java.io.File; 8 9 import org.openqa.selenium.By; 10 import org.openqa.selenium.WebDriver; 11 import org.openqa.selenium.WebElement; 12 import org.openqa.selenium.chrome.ChromeDriver; 13 import org.openqa.selenium.interactions.Actions; 14 import org.openqa.selenium.support.ui.Select; 15 import org.testng.Assert; 16 import org.testng.annotations.AfterMethod; 17 18 public class ChormeOpen { 19 WebDriver driver; 20 @Test 21 public void opentest() { 22 File file = new File(""); 23 System.out.println(file.getAbsolutePath()); 24 String url = file.getAbsolutePath() + "/html/" + "file4.html"; 25 driver.get(url); 26 System.out.println(driver.getCurrentUrl()); 27 // 28 WebElement fruit = driver.findElement(By.name("fruit")); 29 Select droplist = new Select(fruit); 30 //根据Index,下标从0开始 31 droplist.selectByIndex(3); 32 Assert.assertEquals("猕猴桃", droplist.getFirstSelectedOption().getText()); 33 //根据value属性值 34 droplist.selectByValue("shanzha"); 35 Assert.assertEquals("山楂", droplist.getFirstSelectedOption().getText()); 36 //通过显示的文字 37 droplist.selectByVisibleText("荔枝"); 38 Assert.assertEquals("荔枝", droplist.getFirstSelectedOption().getText()); 39 try { 40 Thread.sleep(3000); 41 } catch (InterruptedException e) { 42 // TODO Auto-generated catch block 43 e.printStackTrace(); 44 } 45 } 46 @BeforeMethod 47 public void beforeMethod() { 48 System.setProperty("webdriver.chrome.driver", "F:\\selenium\\chromedriver.exe"); 49 driver = new ChromeDriver(); 50 } 51 52 @AfterMethod 53 public void afterMethod() { 54 driver.quit(); 55 } 56 57 }
View Code
十三、检查单选列表的选项文字是否符合期望
被测试网页的html源码:
1 <html> 2 <head> 3 <meta charset="UTF-8"> 4 </head> 5 <body> 6 <select name="fruit" size="1"> 7 <option id="peach" value="taozi">桃子</option> 8 <option id="watermelon" value="xigua">西瓜</option> 9 <option id="orange" value="juzi">橘子</option> 10 <option id="kiwifruit" value="mihoutao">猕猴桃</option> 11 <option id="maybush" value="shanzha">山楂</option> 12 <option id="litchi" value="lizhi">荔枝</option> 13 </select> 14 </body> 15 </html>
View Code
Java语言版本的API实例代码:
1 package test; 2 3 import org.testng.annotations.Test; 4 5 import org.testng.annotations.BeforeMethod; 6 7 import java.io.File; 8 import java.util.ArrayList; 9 import java.util.Arrays; 10 import java.util.List; 11 12 import org.openqa.selenium.By; 13 import org.openqa.selenium.WebDriver; 14 import org.openqa.selenium.WebElement; 15 import org.openqa.selenium.chrome.ChromeDriver; 16 import org.openqa.selenium.interactions.Actions; 17 import org.openqa.selenium.support.ui.Select; 18 import org.testng.Assert; 19 import org.testng.annotations.AfterMethod; 20 21 public class ChormeOpen { 22 WebDriver driver; 23 @Test 24 public void opentest() { 25 File file = new File(""); 26 System.out.println(file.getAbsolutePath()); 27 String url = file.getAbsolutePath() + "/html/" + "file4.html"; 28 driver.get(url); 29 System.out.println(driver.getCurrentUrl()); 30 // 31 WebElement fruit = driver.findElement(By.name("fruit")); 32 Select droplist = new Select(fruit); 33 // 34 List<String> exp_options = Arrays.asList((new String[]{"桃子","西瓜","橘子","猕猴桃","山楂","荔枝"})); 35 List<String> act_option = new ArrayList<String>(); 36 for(WebElement option:droplist.getOptions()){ 37 act_option.add(option.getText()); 38 } 39 //断言 40 Assert.assertEquals(exp_options.toArray(), act_option.toArray()); 41 try { 42 Thread.sleep(3000); 43 } catch (InterruptedException e) { 44 // TODO Auto-generated catch block 45 e.printStackTrace(); 46 } 47 } 48 @BeforeMethod 49 public void beforeMethod() { 50 System.setProperty("webdriver.chrome.driver", "F:\\selenium\\chromedriver.exe"); 51 driver = new ChromeDriver(); 52 } 53 54 @AfterMethod 55 public void afterMethod() { 56 driver.quit(); 57 } 58 59 }
View Code
十四、操作多选的选择列表
被测试网页的html源码:
1 <html> 2 <head> 3 <meta charset="UTF-8"> 4 </head> 5 <body> 6 <select name="fruit" size="6" multiple=true> 7 <option id="peach" value="taozi">桃子</option> 8 <option id="watermelon" value="xigua">西瓜</option> 9 <option id="orange" value="juzi">橘子</option> 10 <option id="kiwifruit" value="mihoutao">猕猴桃</option> 11 <option id="maybush" value="shanzha">山楂</option> 12 <option id="litchi" value="lizhi">荔枝</option> 13 </select> 14 </body> 15 </html>
View Code
Java语言版本的API实例代码:
1 package test; 2 3 import org.testng.annotations.Test; 4 5 import org.testng.annotations.BeforeMethod; 6 7 import java.io.File; 8 9 import org.openqa.selenium.By; 10 import org.openqa.selenium.WebDriver; 11 import org.openqa.selenium.WebElement; 12 import org.openqa.selenium.chrome.ChromeDriver; 13 import org.openqa.selenium.support.ui.Select; 14 import org.testng.annotations.AfterMethod; 15 16 public class ChormeOpen { 17 WebDriver driver; 18 @Test 19 public void opentest() { 20 File file = new File(""); 21 System.out.println(file.getAbsolutePath()); 22 String url = file.getAbsolutePath() + "/html/" + "file5.html"; 23 driver.get(url); 24 System.out.println(driver.getCurrentUrl()); 25 // 26 WebElement fruit = driver.findElement(By.name("fruit")); 27 Select droplist = new Select(fruit); 28 //选择 29 droplist.selectByIndex(3); 30 droplist.selectByValue("shanzha"); 31 droplist.selectByVisibleText("桃子"); 32 droplist.deselectAll();//取消全部选择 33 34 //再次选择 35 droplist.selectByIndex(3); 36 droplist.selectByValue("shanzha"); 37 droplist.selectByVisibleText("桃子"); 38 39 //逐个取消 40 droplist.deselectByIndex(3); 41 droplist.deselectByValue("shanzha"); 42 droplist.deselectByVisibleText("桃子"); 43 44 try { 45 Thread.sleep(3000); 46 } catch (InterruptedException e) { 47 // TODO Auto-generated catch block 48 e.printStackTrace(); 49 } 50 } 51 @BeforeMethod 52 public void beforeMethod() { 53 System.setProperty("webdriver.chrome.driver", "F:\\selenium\\chromedriver.exe"); 54 driver = new ChromeDriver(); 55 } 56 57 @AfterMethod 58 public void afterMethod() { 59 driver.quit(); 60 } 61 62 }
View Code
十五、操作单选框
被测试网页的html源码:
1 <html> 2 <head> 3 <meta charset="UTF-8"> 4 </head> 5 <body> 6 <form> 7 <input type="radio" name="fruit" value="berry">草莓</input> 8 <br/> 9 <input type="radio" name="fruit" value="watermelon">西瓜</input> 10 <br/> 11 <input type="radio" name="fruit" value="orange">橙子</input> 12 </form> 13 </body> 14 </html>
View Code
Java语言版本的API实例代码:
1 package test; 2 3 import org.testng.annotations.Test; 4 5 import org.testng.annotations.BeforeMethod; 6 7 import java.io.File; 8 import java.util.List; 9 10 import org.openqa.selenium.By; 11 import org.openqa.selenium.WebDriver; 12 import org.openqa.selenium.WebElement; 13 import org.openqa.selenium.chrome.ChromeDriver; 14 import org.testng.Assert; 15 import org.testng.annotations.AfterMethod; 16 17 public class ChormeOpen { 18 WebDriver driver; 19 @Test 20 public void opentest() { 21 File file = new File(""); 22 System.out.println(file.getAbsolutePath()); 23 String url = file.getAbsolutePath() + "/html/" + "file6.html"; 24 driver.get(url); 25 System.out.println(driver.getCurrentUrl()); 26 // 27 WebElement radioOption = driver.findElement(By.xpath("//input[@value='berry']")); 28 if(!radioOption.isSelected()){ 29 radioOption.click(); 30 } 31 Assert.assertTrue(radioOption.isSelected()); 32 // 33 List<WebElement> fruits = driver.findElements(By.name("fruit")); 34 for(WebElement fruit:fruits){ 35 if(fruit.getAttribute("value").equals("watermelon")){ 36 if(!fruit.isSelected()){ 37 fruit.click(); 38 } 39 Assert.assertTrue(fruit.isSelected()); 40 break; 41 } 42 } 43 try { 44 Thread.sleep(3000); 45 } catch (InterruptedException e) { 46 // TODO Auto-generated catch block 47 e.printStackTrace(); 48 } 49 } 50 @BeforeMethod 51 public void beforeMethod() { 52 System.setProperty("webdriver.chrome.driver", "F:\\selenium\\chromedriver.exe"); 53 driver = new ChromeDriver(); 54 } 55 56 @AfterMethod 57 public void afterMethod() { 58 driver.quit(); 59 } 60 61 }
View Code
十六、操作复选框
被测试网页的html源码:
1 <html> 2 <head> 3 <meta charset="UTF-8"> 4 </head> 5 <body> 6 <form> 7 <input type="checkbox" name="fruit" value="berry">草莓</input> 8 <br/> 9 <input type="checkbox" name="fruit" value="watermelon">西瓜</input> 10 <br/> 11 <input type="checkbox" name="fruit" value="orange">橙子</input> 12 </form> 13 </body> 14 </html>
View Code
Java语言版本的API实例代码:
1 package test; 2 3 import org.testng.annotations.Test; 4 5 import org.testng.annotations.BeforeMethod; 6 7 import java.io.File; 8 import java.util.List; 9 10 import org.openqa.selenium.By; 11 import org.openqa.selenium.WebDriver; 12 import org.openqa.selenium.WebElement; 13 import org.openqa.selenium.chrome.ChromeDriver; 14 import org.testng.Assert; 15 import org.testng.annotations.AfterMethod; 16 17 public class ChormeOpen { 18 WebDriver driver; 19 @Test 20 public void opentest() { 21 File file = new File(""); 22 System.out.println(file.getAbsolutePath()); 23 String url = file.getAbsolutePath() + "/html/" + "file7.html"; 24 driver.get(url); 25 System.out.println(driver.getCurrentUrl()); 26 // 27 WebElement orangcheckbox = driver.findElement(By.xpath("//input[@value='orange']")); 28 if(!orangcheckbox.isSelected()){ 29 orangcheckbox.click(); 30 } 31 Assert.assertTrue(orangcheckbox.isSelected()); 32 // 33 List<WebElement> checkboxs = driver.findElements(By.name("fruit")); 34 for(WebElement checkbox:checkboxs){ 35 checkbox.click(); 36 } 37 try { 38 Thread.sleep(3000); 39 } catch (InterruptedException e) { 40 // TODO Auto-generated catch block 41 e.printStackTrace(); 42 } 43 } 44 @BeforeMethod 45 public void beforeMethod() { 46 System.setProperty("webdriver.chrome.driver", "F:\\selenium\\chromedriver.exe"); 47 driver = new ChromeDriver(); 48 } 49 50 @AfterMethod 51 public void afterMethod() { 52 driver.quit(); 53 } 54 55 }
View Code
十七、检查页面元素的文本内容是否出现
被测试网页的HTML代码:
1 <html> 2 <head> 3 <meta charset="UTF-8"> 4 </head> 5 <body> 6 <p>《三生三世十里桃花》这个电影真的很棒!</p> 7 <p>主要是杨洋不错!</p> 8 </body> 9 </html>
View Code
Java语言版本的API实例代码:
1 package test; 2 3 import org.testng.annotations.Test; 4 5 import org.testng.annotations.BeforeMethod; 6 7 import java.io.File; 8 import org.openqa.selenium.By; 9 import org.openqa.selenium.WebDriver; 10 import org.openqa.selenium.WebElement; 11 import org.openqa.selenium.chrome.ChromeDriver; 12 import org.testng.Assert; 13 import org.testng.annotations.AfterMethod; 14 15 public class ChormeOpen { 16 WebDriver driver; 17 @Test 18 public void opentest() { 19 File file = new File(""); 20 System.out.println(file.getAbsolutePath()); 21 String url = file.getAbsolutePath() + "/html/" + "file8.html"; 22 driver.get(url); 23 System.out.println(driver.getCurrentUrl()); 24 // 25 WebElement text = driver.findElement(By.xpath("//p[1]")); 26 String contentText = text.getText(); 27 Assert.assertEquals("《三生三世十里桃花》这个电影真的很棒!", contentText); 28 Assert.assertTrue(contentText.contains("三生三世")); 29 Assert.assertTrue(contentText.startsWith("《三")); 30 Assert.assertTrue(contentText.endsWith("很棒!")); 31 try { 32 Thread.sleep(3000); 33 } catch (InterruptedException e) { 34 // TODO Auto-generated catch block 35 e.printStackTrace(); 36 } 37 } 38 @BeforeMethod 39 public void beforeMethod() { 40 System.setProperty("webdriver.chrome.driver", "F:\\selenium\\chromedriver.exe"); 41 driver = new ChromeDriver(); 42 } 43 44 @AfterMethod 45 public void afterMethod() { 46 driver.quit(); 47 } 48 49 }
View Code
十八、执行javaScript脚本
被测试网页的网址:
http://baidu.com
Java语言版本的API实例代码:
1 package test; 2 3 import org.testng.annotations.Test; 4 5 import org.testng.annotations.BeforeMethod; 6 import org.openqa.selenium.JavascriptExecutor; 7 import org.openqa.selenium.WebDriver; 8 import org.openqa.selenium.chrome.ChromeDriver; 9 import org.testng.Assert; 10 import org.testng.annotations.AfterMethod; 11 12 public class ChormeOpen { 13 WebDriver driver; 14 String url = "http://www.baidu.com"; 15 @Test 16 public void opentest() { 17 driver.get(url); 18 JavascriptExecutor js = (JavascriptExecutor) driver; 19 String title = (String) js.executeScript("return document.title"); 20 Assert.assertEquals("百度一下,你就知道", title); 21 22 try { 23 Thread.sleep(3000); 24 } catch (InterruptedException e) { 25 // TODO Auto-generated catch block 26 e.printStackTrace(); 27 } 28 String searchText = (String) js.executeScript("var button= document.getElementById('su');return button.value"); 29 System.out.println(searchText); 30 } 31 @BeforeMethod 32 public void beforeMethod() { 33 System.setProperty("webdriver.chrome.driver", "F:\\selenium\\chromedriver.exe"); 34 driver = new ChromeDriver(); 35 } 36 37 @AfterMethod 38 public void afterMethod() { 39 driver.quit(); 40 } 41 42 }
View Code
十九、拖曳页面元素
被测试网页的网址:
http://jqueryui.com/resources/demos/draggable/scroll.html
Java语言版本的API实例代码:
1 package test; 2 3 import org.testng.annotations.Test; 4 5 import org.testng.annotations.BeforeMethod; 6 import org.openqa.selenium.By; 7 import org.openqa.selenium.WebDriver; 8 import org.openqa.selenium.WebElement; 9 import org.openqa.selenium.chrome.ChromeDriver; 10 import org.openqa.selenium.interactions.Actions; 11 import org.testng.annotations.AfterMethod; 12 13 public class ChormeOpen { 14 WebDriver driver; 15 String url = "http://jqueryui.com/resources/demos/draggable/scroll.html"; 16 17 @Test 18 public void opentest() { 19 driver.get(url); 20 WebElement draggable = driver.findElement(By.id("draggable")); 21 //向下拖动10个像素、共拖动5次 22 for(int i=0;i<5;i++){ 23 new Actions(driver).dragAndDropBy(draggable, 0, 10).build().perform(); 24 } 25 //向右拖动10个像素、共拖动5次 26 for(int i=0;i<5;i++){ 27 new Actions(driver).dragAndDropBy(draggable, 10, 0).build().perform();; 28 } 29 try { 30 Thread.sleep(3000); 31 } catch (InterruptedException e) { 32 // TODO Auto-generated catch block 33 e.printStackTrace(); 34 } 35 } 36 37 @BeforeMethod 38 public void beforeMethod() { 39 System.setProperty("webdriver.chrome.driver", "F:\\selenium\\chromedriver.exe"); 40 driver = new ChromeDriver(); 41 } 42 43 @AfterMethod 44 public void afterMethod() { 45 driver.quit(); 46 } 47 48 }
View Code
二十、模拟键盘的操作
被测试网页的网址:
http://www.baidu.com
Java语言版本的API实例代码:
1 package test; 2 3 import org.testng.annotations.Test; 4 5 import org.testng.annotations.BeforeMethod; 6 import org.openqa.selenium.Keys; 7 import org.openqa.selenium.WebDriver; 8 import org.openqa.selenium.chrome.ChromeDriver; 9 import org.openqa.selenium.interactions.Actions; 10 import org.testng.annotations.AfterMethod; 11 12 public class ChormeOpen { 13 WebDriver driver; 14 String url = "http://www.baidu.com"; 15 16 @Test 17 public void opentest() { 18 driver.get(url); 19 Actions action = new Actions(driver); 20 action.keyDown(Keys.CONTROL);//按下Ctrl键 21 action.keyDown(Keys.SHIFT);//按下Shift键 22 action.keyDown(Keys.ALT);//按下Alt键 23 action.keyUp(Keys.CONTROL);//释放Ctrl键 24 action.keyUp(Keys.SHIFT);//释放Shift键 25 action.keyUp(Keys.ALT);//释放ALT键 26 //模拟键盘在搜索输入框输入大写的字符“ABCD” 27 action.keyDown(Keys.SHIFT).sendKeys("abcd").perform(); 28 try { 29 Thread.sleep(3000); 30 } catch (InterruptedException e) { 31 // TODO Auto-generated catch block 32 e.printStackTrace(); 33 } 34 } 35 36 @BeforeMethod 37 public void beforeMethod() { 38 System.setProperty("webdriver.chrome.driver", "F:\\selenium\\chromedriver.exe"); 39 driver = new ChromeDriver(); 40 } 41 42 @AfterMethod 43 public void afterMethod() { 44 driver.quit(); 45 } 46 47 }
View Code
转载于:https://www.cnblogs.com/successcai/p/6661708.html
WebDriver API 实例详解(二)相关推荐
- 微信小程序中相机api_微信小程序 Image API实例详解
选择图片时可设置图片是否是原图,图片来源.这用的也挺常见的,比如个人中心中设置头像,可以与wx.upLoadFile()API使用 主要方法: wx.chooseImage(object) wxml ...
- C#操作GridView控件绑定数据实例详解(二)
上文实现的GridView控件: (一)翻页功能 翻页内容,主要实现的是该控件下面,上下翻页,跳转到指定页面. 翻页功能要注意前台页面下面这段代码中的相关命令: <PagerTemplate & ...
- solidworks api二次开发实例详解_Solidworks开发语言对比及分析
很多初学Solidworks二次开发的同学,也许都会纠结使用何种语言进行二次开发.对于Solidworks二次开发的语言,官方有VBA,VB.NET,C#以及C++,四种语言. 用户通常会有如下疑问, ...
- Element Plus 实例详解(二)___Button 按钮
Element Plus 实例详解(二)___Button 按钮 文章目录: 一.前言 二.搭建Element Plus试用环境 1.搭建Vue3项目(基于Vite + Vue) 2.安装Elemen ...
- python画二维散点图-基于python 二维数组及画图的实例详解
1.二维数组取值 注:不管是二维数组,还是一维数组,数组里的数据类型要一模一样,即若是数值型,全为数值型 #二维数组 import numpy as np list1=[[1.73,1.68,1.71 ...
- linux 进程间通信 dbus-glib【实例】详解二(下) 消息和消息总线(ListActivatableNames和服务器的自动启动)(附代码)
linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...
- linux 进程间通信 dbus-glib【实例】详解二(上) 消息和消息总线(附代码)
linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...
- EXT核心API详解(二)-Array/Date/Function/Number/String
EXT核心API详解(二)-Array/Date/Function/Number/String Array类 indexOf( Object o ) Number object是否在数组中,找不到返 ...
- python生成二维码_python生成二维码的实例详解
python生成二维码的实例详解 版本相关 操作系统:Mac OS X EI Caption Python版本:2.7 IDE:Sublime Text 3 依赖库 Python生成二维码需要的依赖库 ...
最新文章
- PHP开发之thinkPHP分层设计
- Linux C编程--fork()详解
- basequickadapter详解_BaseRecyclerViewAdapter(持续更新!)
- 使用Azure云原生构建博客是怎样一种体验?(下篇)
- python如何把二进制转文本_在python3中如何把文本转换为二进制
- JQuery 绑定事件
- dw cc链接mysql_Adobe Dreamweaver CC MySQL连接 报404错误的解决方法_MySQL
- 移远ec20 4g模块linux驱动移植,Hi3798移植4G模块(移远EC20)
- 2022城市辅助驾驶赛道陷入“三国争霸”,数据智能助力毫末智行杀出重围?
- 周日报名截止,翼支付杯大数据建模大赛16万大奖邀你来!!
- 移动端touch拖动事件和click事件冲突问题解决
- 国际学校入学考试MAP语法测试题真题讲解
- 用js做一个鼠标惯性动画
- Tp5设置参数全局过滤方法
- zookeeper集群部署
- 【tinyint和int区别】
- python3 setup.py install_安装Twisted执行python3 setup.py install报错
- 十年沉浮,Web2 到 Web3 的转变之路
- hdu 1983 Kaitou Kid - The Phantom Thief (2)【Bfs+暴力枚举】
- 在3DMAX中为动画添加根骨骼运动