Selenium 自動化測試工具<2>(Selenium 常用API的使用方法)

文章目錄

    • 瀏覽器操作
      • 瀏覽器最大化
      • 設置瀏覽器的大小
      • 瀏覽器的前進和后退
      • 操作瀏覽器滾動條
    • 鍵盤事件
      • 單個按鍵用法
      • 鍵盤組合鍵用法
    • 鼠標事件
    • 不同窗口搜索
    • 定位一組元素
    • 定位多層框架
    • 下拉框定位
    • alert、confirm、prompt 的處理
    • 上傳文件操作
    • 自動截屏

繼上一篇文章對 Selenium API 的使用,本篇文章將繼續講解剩下的一些主要的 API 的使用方法。

瀏覽器操作

瀏覽器最大化

需要使用到的 API:

  • manage()
  • window()
  • maximize()

場景:對瀏覽器進行最大化,然后獲取到百度頁面上的“換一換”按鈕,并且獲得文本

在這里插入圖片描述

代碼實現:

    private static void test9() {// 創建瀏覽器驅動WebDriver webDriver = new ChromeDriver();// 跳轉百度頁面webDriver.get("https://www.baidu.com/");//瀏覽器最大化webDriver.manage().window().maximize();//定位“換一換"按鈕String text = webDriver.findElement(By.cssSelector("#hotsearch-refresh-btn > span")).getText();if(text != null) {System.out.println("測試通過,text:" + text);}else {System.out.println("測試未通過");}}

執行結果:

在這里插入圖片描述

設置瀏覽器的大小

場景:將瀏覽器的大小設置成 200*400 的大小

涉及到的 API:

  • manage()
  • window()
  • setSize()

代碼實現:

    private static void test10() {// 創建瀏覽器驅動WebDriver webDriver = new ChromeDriver();// 指定跳轉頁面webDriver.get("https://www.baidu.com/");// 設置瀏覽器大小webDriver.manage().window().setSize(new Dimension(200, 400));webDriver.quit();}

執行結果:

在這里插入圖片描述

瀏覽器的前進和后退

場景1:在百度輸入框中輸入“張三”,點擊百度一下按鈕進行搜索,搜索出來之后,點擊導航欄上的后退按鈕,重新返回到百度的主頁面

涉及到的API:

  • navigate()
  • back()
  • forwrd()

代碼實現:

private static void test11() throws InterruptedException {// 創建瀏覽器驅動WebDriver webDriver = new ChromeDriver();// 指定跳轉頁面webDriver.get("https://www.baidu.com/");// 選擇輸入框,輸入張三webDriver.findElement(By.cssSelector("#kw")).sendKeys("張三");// 選擇百度一下并點擊webDriver.findElement(By.cssSelector("#su")).click();System.out.println("當前頁面的url:" + webDriver.getCurrentUrl());//進入新的頁面,休眠3秒sleep(3000);//選擇控制臺上的后退按鈕webDriver.navigate().back();//休眠三秒,后退之后,獲取當前頁面的urlsleep(3000);System.out.println("后退之后,當前頁面的url:" + webDriver.getCurrentUrl());webDriver.quit();}

執行結果:

在這里插入圖片描述

場景2: 場景1:在百度輸入框中輸入“張三”,點擊百度一下按鈕進行搜索,搜索出來之后,點擊導航欄上的后退按鈕,重新返回到百度的主頁面,然后再點擊前進按鈕,重新回到剛才搜索到的張三頁面。

代碼實現:

private static void test12() throws InterruptedException {// 創建瀏覽器驅動WebDriver webDriver = new ChromeDriver();// 指定跳轉頁面webDriver.get("https://www.baidu.com/");// 選擇輸入框,輸入張三webDriver.findElement(By.cssSelector("#kw")).sendKeys("張三");// 選擇百度一下并點擊webDriver.findElement(By.cssSelector("#su")).click();String currentUrl = webDriver.getCurrentUrl();System.out.println("搜索到張三的頁面的url:" + currentUrl);//進入新的頁面,休眠3秒sleep(3000);//選擇控制臺上的后退按鈕webDriver.navigate().back();//休眠三秒,后退之后,獲取當前頁面的urlsleep(3000);System.out.println("后退之后,當前頁面的url:" + webDriver.getCurrentUrl());//進行前進webDriver.navigate().forward();sleep(3000);// 獲取到前進后的頁面String currentUrl1 = webDriver.getCurrentUrl();System.out.println(currentUrl1);// 判斷前進后的頁面和第一次搜索到的頁面是不是同一個,如果是,則測試通過,否則測試未通過if(currentUrl.equals(currentUrl1)) {System.out.println("測試通過");}else {System.out.println("測試未通過");}webDriver.quit();}

在這里插入圖片描述

操作瀏覽器滾動條

瀏覽器滾動條的控制需要依靠 js 腳本,代碼如下:

#將瀏覽器滾動條滑到最頂端document.documentElement.scrollTop=0
#將瀏覽器滾動條滑到最底端
document.documentElement.scrollTop=10000

涉及到的API:

  • executeScript()

Java代碼實現操作:

private static void test13() throws InterruptedException {// 創建瀏覽器驅動WebDriver webDriver = new ChromeDriver();// 指定跳轉頁面webDriver.get("https://www.baidu.com/");// 選擇輸入框,輸入張三webDriver.findElement(By.cssSelector("#kw")).sendKeys("張三");// 選擇百度一下并點擊webDriver.findElement(By.cssSelector("#su")).click();//休眠3秒,等待頁面完成渲染sleep(3000);//將滾動條劃到最下面String js_bottom = "document.documentElement.scrollTop=10000";((JavascriptExecutor)webDriver).executeScript(js_bottom);sleep(3000);//將滾動條移動到最上面String js_up = "document.documentElement.scrollTop=0";((JavascriptExecutor)webDriver).executeScript(js_up);sleep(3000);webDriver.quit();}

這里執行的結果,請自行演示。

鍵盤事件

單個按鍵用法

自動輸入鍵盤上一些按鍵的用法,常見的如下:

  • webDriver.sendKeys(Keys.ENTER) 回車

  • webDriver.sendKeys((Keys.TAB) TAB

  • webDriver.sendKeys((Keys.SPACE) 空格鍵

  • webDriver.sendKeys((Keys.ESCAPE) 回退鍵

    這里的用法都一樣,所以,下面只講解一個回車鍵一個例子

private static void test14() throws InterruptedException {// 創建瀏覽器驅動WebDriver webDriver = new ChromeDriver();// 指定跳轉頁面webDriver.get("https://www.baidu.com/");// 選擇輸入框,輸入張三webDriver.findElement(By.cssSelector("#kw")).sendKeys("張三");// 使用回車鍵搜索webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.ENTER);sleep(3000);// 獲取當前頁面的urlSystem.out.println(webDriver.getCurrentUrl());webDriver.quit();}

鍵盤組合鍵用法

  • webDriver.sendKeys(Keys.CONTROL, “A”) 全選(Ctrl+A)
  • webDriver.sendKeys(Keys.CONTROL,”C”) 復制(Ctrl+C)
  • webDriver.sendKeys(Keys.CONTROL,”X”) 剪貼(Ctrl+X)
  • webDriver.sendKeys(Keys.CONTROL,”V”) 粘貼(Ctrl+V)

代碼實現:

private static void test15() throws InterruptedException {// 創建瀏覽器驅動WebDriver webDriver = new ChromeDriver();// 指定跳轉頁面webDriver.get("https://www.baidu.com/");// 選擇輸入框,輸入張三webDriver.findElement(By.cssSelector("#kw")).sendKeys("張三");sleep(3000);//全選輸入框中的文本,也就是張三 ctrl+AwebDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "A");sleep(3000);//剪切文本ctrl+XwebDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "X");sleep(3000);//粘貼文本ctrl+VwebDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "V");}

執行結果自行測試觀察現象。

鼠標事件

鼠標的一些常用動作如下:

  • Action.contextClick()右擊
  • Action.doubleclick() 雙擊
  • Action.dragAndDrop() 拖動
  • Action.moveToElement() 移動

場景:在搜索框中輸入張三,點擊回車鍵搜索,然后將鼠標移動到圖片上,然后鼠標點擊右鍵

在這里插入圖片描述

代碼實現:

private static void test16() throws InterruptedException {// 創建瀏覽器驅動WebDriver webDriver = new ChromeDriver();// 指定跳轉頁面webDriver.get("https://www.baidu.com/");// 選擇輸入框,輸入張三webDriver.findElement(By.cssSelector("#kw")).sendKeys("張三");// 使用回車鍵搜索webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.ENTER);sleep(3000);// 創建一個Actions對象,生成用戶行為。Actions action = new Actions(webDriver);// 通過CSS選擇器定位圖片元素,定義一個目標WebElement element = webDriver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-pic_p4Uej.s-tab-pic"));//moveToElement(element)是將鼠標移動到指定的目標上//contextClick()點擊鼠標右鍵//perform()顯示以上執行的動作action.moveToElement(element).contextClick().perform();}

請自行執行代碼觀察效果。

不同窗口搜索

場景:在百度搜索頁面,點擊新聞按鈕,然后進入新聞頁面,在新聞頁面的搜索框中搜索烏克蘭,進行頁面跳轉。

在這里插入圖片描述

代碼實現:

    private static void test17() {// 創建瀏覽器驅動WebDriver webDriver = new ChromeDriver();// 進入百度主頁面webDriver.get("https://www.baidu.com/");// 定位新聞按鈕并點擊webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();// 進入到新聞頁面,定位搜索框并輸入“烏克蘭”webDriver.findElement(By.cssSelector("#ww")).sendKeys("烏克蘭");// 定位搜索按鈕,并點擊webDriver.findElement(By.cssSelector("#s_btn_wr")).click();webDriver.quit();}

執行結果:可以看到,結果最后報錯了,并沒有找到這樣的元素,這是為什么呢?

在這里插入圖片描述

異常原因:

可以看到,點擊新聞后,又打開了一個新的窗口,但是,上述代碼中,我們想要定位的是百度新聞頁面的搜索框,從新聞頁面中搜索烏克蘭,而上述代碼它還是在百度主頁面查找元素,所以,它找不到這個搜索框,所以就會報錯。

在這里插入圖片描述

解決方法:

把當前瀏覽器中的所有窗口獲取到,因為新的窗口都是在最后一個,所以獲取到最后一個窗口信息,然后進入到新的窗口中,進行后續的操作即可。

涉及到的API:

  • webDriver.getWindowHandles()
  • webDriver.switchTo().window(target);
private static void test17() throws InterruptedException {// 創建瀏覽器驅動WebDriver webDriver = new ChromeDriver();// 進入百度主頁面webDriver.get("https://www.baidu.com/");// 定位新聞按鈕并點擊webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();sleep(3000);// webDriver.getWindowHandle(); 獲取當前窗口信息// 獲取瀏覽器中所有的窗口Set<String> windowHandles = webDriver.getWindowHandles();// 遍歷所有窗口,定位最后一個窗口,也就是百度新聞的敞口String target = "";for(String win : windowHandles) {target = win;}// 進入百度新聞的窗口中webDriver.switchTo().window(target);sleep(3000);// 進入到新聞頁面,定位搜索框并輸入“烏克蘭”webDriver.findElement(By.cssSelector("#ww")).sendKeys("烏克蘭");// 定位搜索按鈕,并點擊webDriver.findElement(By.cssSelector("#s_btn_wr")).click();sleep(3000);webDriver.quit();}

定位一組元素

使用 findElement() 方法可以很方便的定位到某個特定的對象,但是,有的時候我們需要定位一組元素,這時候就需要使用 findElements() 方法了。

場景:批量操作對象,比如,將下圖中所有的 checkbox 都勾上。

實現步驟:將這一組元素都獲取到,然后進行篩選,將checkbox都進行點擊。

在這里插入圖片描述

前端頁面代碼:

<html>
<head><meta http-equiv="content-type" content="text/html;charset=utf-8" /><title>Checkbox</title>
</head>
<body>
<h3>checkbox</h3>
<div class="well"><form class="form-horizontal"><div class="control-group"><label class="control-label" for="c1">checkbox1</label><div class="controls"><input type="checkbox" id="c1" /></div></div><div class="control-group"><label class="control-label" for="c2">checkbox2</label><div class="controls"><input type="checkbox" id="c2" /></div></div><div class="control-group"><label class="control-label" for="c3">checkbox3</label><div class="controls"><input type="checkbox" id="c3" /></div></div><div class="control-group"><label class="control-label" for="r">radio</label><div class="controls"><input type="radio" id="r1" /></div></div><div class="control-group"><label class="control-label" for="r">radio</label><div class="controls"><input type="radio" id="r2" /></div></div></form>
</div>
</body>
</html>

代碼實現:

private static void test18() throws InterruptedException {// 獲取瀏覽器驅動WebDriver webDriver = new ChromeDriver();// 跳轉頁面webDriver.get("file:///D:/gitee/java-code-exercise/untitled5/src/main/resources/test01.html");sleep(3000);// 通過css選擇器中標簽的方式,獲取所有的input標簽元素List<WebElement> input = webDriver.findElements(By.cssSelector("input"));// 遍歷所有元素,對checkbox的元素進行點擊for(WebElement ele : input) {String type = ele.getAttribute("type");if(type.equals("checkbox")) {//進行勾選ele.click();}}sleep(5000);webDriver.quit();}

定位多層框架

場景: 如下兩張圖,在frame框架中,還有一個inner框架,所以他是多層框架嵌套,現在,對inner框架中的click按鈕進行點擊。

在這里插入圖片描述

在這里插入圖片描述

前端頁面代碼:

<html>
<head><meta http-equiv="content-type" content="text/html;charset=utf-8" /><title>frame</title><linkhref="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstra
p-combined.min.css" rel="stylesheet" /><script type="text/javascript">$(document).ready(function(){});</script>
</head>
<body>
<div class="row-fluid"><div class="span10 well"><h3>frame</h3><iframe id="f1" src="inner.html" width="800" ,height="600"></iframe></div>
</div>
</body>
<scriptsrc="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
</html>

代碼實現:

思路:先一層一層的定位框架,例如,先定位到最外層框架,這里通過 id 屬性來定位框架。,然后再定位里面的框架,之后再進行后續的點擊操作即可

前端代碼連接:

在這里插入圖片描述

涉及到的API:

webDriver.switchTo().frame(); 定位框架

    private static void test19() throws InterruptedException {// 獲取瀏覽器驅動WebDriver webDriver = new ChromeDriver();// 跳轉頁面webDriver.get("file:///D:/gitee/java-code-exercise/untitled5/src/main/resources/test02_01.html");sleep(3000);// 定位下層框架webDriver.switchTo().frame("f1");// 定位click按鈕并點擊webDriver.findElement(By.cssSelector("body > div > div > a")).click();sleep(2000);}

下拉框定位

場景:如下圖,有一個下拉框,現在要打開下拉框,然后選中里面的某個選項。例如選中圖中的9.03

在這里插入圖片描述

前端頁面代碼:

<html>
<body>
<select id="ShippingMethod"onchange="updateShipping(options[selectedIndex]);" name="ShippingMethod"><option value="12.51">UPS Next Day Air ==> $12.51</option><option value="11.61">UPS Next Day Air Saver ==> $11.61</option><option value="10.69">UPS 3 Day Select ==> $10.69</option><option value="9.03">UPS 2nd Day Air ==> $9.03</option><option value="8.34">UPS Ground ==> $8.34</option><option value="9.25">USPS Priority Mail Insured ==> $9.25</option><option value="7.45">USPS Priority Mail ==> $7.45</option><option value="3.20" selected="">USPS First Class ==> $3.20</option>
</select>
</body>
</html>

代碼實現:

涉及到的API:

  • Select 對象
  • select.selectByIndex() 通過下標定位
  • select.selectByValue() 通過屬性定位
private static void test20() throws InterruptedException {// 獲取瀏覽器驅動WebDriver webDriver = new ChromeDriver();// 跳轉頁面webDriver.get("file:///D:/gitee/java-code-exercise/untitled5/src/main/resources/test04.html");sleep(3000);// 選中下拉框WebElement element = webDriver.findElement(By.cssSelector("#ShippingMethod"));// 借助Select對象Select select = new Select(element);// 第一種方式// 通過下標定位到指定選項//select.selectByIndex(3);//下拉框中選項的下標從0開始//第二種方式// 通過value屬性的值來確定指定的選項select.selectByValue("9.03");sleep(3000);webDriver.quit();}

alert、confirm、prompt 的處理

  • text() 方法 返回彈框,確認框,提示框中的文本信息
  • accept() 點擊確認按鈕
  • dismiss() 點擊取消按鈕,如果有的的話。
  • alert() 定位彈窗

場景:點擊彈窗鏈接按鈕,然后先獲取彈窗中的信息,測試獲取的信息和彈窗中的信息是否一致,接著向對話框中輸入我愛你,然后在頁面上顯示。

在這里插入圖片描述

前端頁面代碼:

<html>
<head><meta charset="UTF-8"><title></title><script type="text/javascript">function disp_prompt(){let name = prompt("Please enter your name", "");if (name!=null &&name!=""){document.write("Hello " +name + "!")}}</script>
</head>
<body>
<input type="button" onclick="disp_prompt()" value="請點擊"/>
</body>
</html>
 private static void test21() throws InterruptedException {// 獲取瀏覽器驅動WebDriver webDriver = new ChromeDriver();// 跳轉頁面webDriver.get("file:///D:/gitee/java-code-exercise/untitled5/src/main/resources/test0502.html");//定位彈窗連接按鈕,并點擊webDriver.findElement(By.cssSelector("body > input[type=button]")).click();sleep(2000);//選擇彈窗,并獲取彈窗中的信息Alert alert = webDriver.switchTo().alert();System.out.println("彈窗中的信息:" + alert.getText());String info = "Please enter your name";if(alert.getText().equals(info)) {System.out.println("彈窗信息測試通過");}else {System.out.println("彈窗信息測試不通過");}//向彈窗的對話框中輸入信息alert.sendKeys("我愛你");sleep(3000);//點擊確認按鈕alert.accept();
//        點擊彈框中取消按鈕
//        alert.dismiss();sleep(3000);//獲取頁面中的值String text = webDriver.findElement(By.cssSelector("body")).getText();String pageInfo = "Hello 我愛你!";if(text.equals(pageInfo)) {System.out.println("彈框信息測試成功: " + text);}else {System.out.println("彈框信息測試失敗");}webDriver.quit();}

執行結果:

在這里插入圖片描述

在這里插入圖片描述

上傳文件操作

在Selenium中的上傳文件并沒有那么復雜,只要定位到上傳按鈕,通過sendKeys添加本地文件路徑即可,代碼如下:

前端頁面代碼:

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>upload_file</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js">
</script>
<link
href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstra
p-combined.min.css" rel="stylesheet" />
<script type="text/javascript">
</script>
</head>
<body>
<div class="row-fluid">
<div class="span6 well">
<h3>upload_file</h3>
<input type="file" name="file" />
</div>
</div>
</body>
<script src="http://netdna.bootstrapcdn.com/twitterbootstrap/2.3.2/js/bootstrap.
min.js"></script>
</html>

代碼實現:

    private static void test22() throws InterruptedException {// 獲取瀏覽器驅動WebDriver webDriver = new ChromeDriver();//跳轉頁面webDriver.get("file:///D:/gitee/java-code-exercise/untitled5/src/main/resources/test08.html");sleep(3000);//定位上傳文件按鈕,并點擊WebElement element = webDriver.findElement(By.cssSelector("body > div > div > input[type=file]"));//上傳文件路徑element.sendKeys("D:\\無標題.png");webDriver.quit();}

自動截屏

在自動測試的過程中,如果測試結果不符合我們的預期,就可以把這個測試結果的現象給截圖下來,這樣就不用一直的對這個錯誤復現,要是使用自動截圖,需要引入以下依賴:

<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.15.1</version>
</dependency>

場景:

在百度的頁面輸入張三,然后點擊搜索,對搜索結果的頁面進行截圖。

在這里插入圖片描述

代碼實現:

    private static void test23() throws IOException, InterruptedException {// 獲取瀏覽器驅動WebDriver webDriver = new ChromeDriver();// 跳轉百度頁面webDriver.get("https://www.baidu.com/");sleep(3000);// 定位搜索框,輸入張三,點擊百度一下webDriver.findElement(By.cssSelector("#kw")).sendKeys("張三");webDriver.findElement(By.cssSelector("#su"));sleep(3000);// 截圖File screenshotAs = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE);// 將截圖復制到指定的路徑FileUtils.copyFile(screenshotAs, new File("d://搜索頁面截圖.pnj"));webDriver.quit();}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/16176.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16176.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/16176.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RT-DRET在實時目標檢測上超越YOLO8

導讀 目標檢測作為計算機視覺的核心任務之一&#xff0c;其研究已經從基于CNN的架構發展到基于Transformer的架構&#xff0c;如DETR&#xff0c;后者通過簡化流程實現端到端檢測&#xff0c;消除了手工設計的組件。盡管如此&#xff0c;DETR的高計算成本限制了其在實時目標檢測…

搭建屬于自己的 Git 倉庫:GitLab

搭建屬于自己的 Git 倉庫&#xff1a;使用 GitLab 文章目錄 搭建屬于自己的 Git 倉庫&#xff1a;使用 GitLab什么是 GitLab&#xff1f;準備工作安裝 Docker使用Docker Compose 快速構建GitLab1、從docker compose快速搭建GitLab2、部署到服務器并訪問3、瀏覽器訪問 在現代軟件…

【數據結構】------C語言實現二叉樹

作者主頁&#xff1a;作者主頁 數據結構專欄&#xff1a;數據結構 創作時間 &#xff1a;2024年5月20日 一、二叉樹的定義 二叉樹(Binary Tree) 是由n個結點構成的有限集(n≥0)&#xff0c;n0時為空樹&#xff0c;n>0時為非空樹。 對于非空樹&#xff1a; 有且僅有一個根…

接口自動化核心模塊Requests詳解(一)

一、Requests簡介 Python的Requests庫是一個功能強大且簡潔的庫&#xff0c;提供了簡單易用的接口來處理HTTP請求。 二、Requests的使用步驟 2.1 安裝Requests庫 在終端命令行&#xff0c;使用pip命令進行安裝&#xff0c; pip install requests 2.2 Requests庫常用方法…

騰訊Java社招面試題真題,最新面試題

Java中synchronized和ReentrantLock有什么區別&#xff1f; 1、鎖的實現方式不同&#xff1a; synchronized是JVM層面的鎖&#xff0c;主要依賴于監視器對象&#xff08;monitor&#xff09;實現。ReentrantLock是JDK層面的鎖&#xff0c;通過Java代碼實現&#xff0c;提供了更…

語雀——云知識庫/筆記

對于日常進行學習/創作或是記錄學習、工作內容與心得的群體來說&#xff0c;能夠及時同步的云筆記應用有著廣泛的應用場景。近期&#xff0c;我也探索了許多款不同的軟件應用&#xff0c;今天來分享一款很有特點的應用——語雀。 語雀&#xff0c;為每一個人提供優秀的文檔和知…

1.6 什么是程序-編譯與調試

目錄 1 程序的作用 2 新建項目及編譯運行 2.1 新建項目 2.2 HelloWorld 程序說明 2.3 printf 打印輸出 2.4 注釋 3 程序的編譯過程及項目位置 4 斷點及調試窗口設置 5 學習C語言后的境界 1 程序的作用 如下圖所示&#xff0c;我們編寫了一個可以做加法的程序&#xf…

vue3 vite項目配置了proxy代理情況下查看真實的接口調用地址

vite配置了proxy代理情況下如何查看真實的接口調用地址? 使用vite進行代理 在vite.config.ts配置了代理 在瀏覽器查看請求頭和響應頭發現只有代理前的url&#xff0c;沒有顯示代理后的路徑 然后發現一個bypass函數&#xff0c;但是此函數只能修改res響應頭的數據&#xff0…

C語言基礎-鏈表和數組的區別

在C語言中&#xff0c;鏈表&#xff08;Linked List&#xff09;和數組&#xff08;Array&#xff09;是兩種常用的數據結構&#xff0c;它們在數據存儲和訪問上各有其獨特的作用和優勢。以下是對這兩種數據結構的作用以及它們之間的不同點的詳細說明&#xff1a; 數組&#x…

Dockerfile文件詳細介紹

前言 Dockerfile是一個文本文件&#xff0c;包含了用于構建Docker鏡像的所有命令和說明。它定義了容器的運行環境、依賴以及啟動方式&#xff0c;是創建Docker鏡像的核心部分。 由于制作鏡像的過程中&#xff0c;需要逐層處理和打包&#xff0c;比較復雜&#xff0c;所以Docke…

實戰復盤:內網環境滲透ms-SQL數據庫

滲透環境&#xff1a;如下圖所示&#xff0c;web服務器、ms-SQL服務器、PC客戶端在同一個網絡中&#xff0c;彼此之間&#xff0c;沒有路由器或防火墻的隔離&#xff0c;這是一種危險的網絡結構&#xff0c;入侵ms-SQL服務器&#xff0c;非常容易。&#xff08;實戰中&#xff…

整理了10個靠譜且熱門的賺錢軟件,適合普通人長期做的賺錢副業

作為一名普通的上班族&#xff0c;我們每天都在辛勤工作&#xff0c;但工資的增長速度卻如同蝸牛般緩慢。不過&#xff0c;別擔心&#xff0c;信息時代總是帶給我們無盡的驚喜&#xff01;今天&#xff0c;我將為大家推薦一些賺錢的寶藏軟件&#xff0c;讓你在閑暇之余輕松實現…

Java-Zookeeper

zookeeper是什么 一個分布式、開源的分布式應用程序協調服務&#xff0c;具有配置維護、域名服務、分布式同步、組服務等 zookeeper有哪些功能 功能簡介集群管理監控節點狀態、運行請求等主節點選舉主節點掛掉之后會執行新主選舉分布式鎖zookeeper提供兩種鎖&#xff1a;獨占…

IEDA常用快捷鍵(后續更新ing)

1. 快速生成語句 1.快速生成main()方法 psvm或者main回車 2.快速生成輸出語句 sout,回車 3.快速生成for循環 fori或者itar,回車 2.快捷鍵 含義操作查找文本CtrlF替換文本CtrlR單行注釋Ctrl/多行注釋CtrlShift/格式化CtrlAltL復制當前內容至下一行CtrlD補全代碼Alt/快速生成…

RAGs:自動化評估 RAG 示例代碼

文章目錄 原理忠實度&#xff08;Faithfulness&#xff09;答案相關性&#xff08;Answer Relevance&#xff09;上下文相關性&#xff08;Context Relevance&#xff09;上下文召回率&#xff08;Context Recall&#xff09;答案正確性&#xff08;Answer Correctness&#xf…

C# 機構仿真實例

1、實現連桿帶動滑塊運動 一個連桿旋轉帶動另一個連桿&#xff0c;另一個連桿拖動滑塊&#xff0c;點擊“開始”按鈕開始運動&#xff0c;再點擊按鈕&#xff0c;則停止運動。 2、實現程序 #region 機構仿真Image image null;Timer timer new Timer();int width 0;int heig…

一千題,No.0027(Phone Desktop)

描述 Little Rosie has a phone with a desktop (or launcher, as it is also called). The desktop can consist of several screens. Each screen is represented as a grid of size 53, i.e., five rows and three columns. There are x applications with an icon size o…

【網絡安全】社會工程學攻擊與防范

一、社會工程學概述 1、社會工程學的定義 通過利用人們的心理弱點、本能反應、好奇心、信任、貪婪等一些心理陷阱進行的諸如欺騙、傷害、信息盜取、利益謀取等對社會及人類帶來危害的行為或方法。 當網絡惡意攻擊者無法通過純粹的計算機技術達到目的時&#xff0c;高超的情商…

9.Redis之list類型

list相當于鏈表、數據表 1.list類型基本介紹 列表中的元素是有序的"有序"的含義,要根據上下文區分~~有的時候,談到有序,指的是"升序","降序”有的時候,談到的有序,指的是, 順序很關鍵~~如果把元素位置顛倒,順序調換.此時得到的新的 List 和之前的 Li…

js簡單綜合案例之簡易ATM取款機、渲染表格案例、封裝時間函數

這里寫目錄標題 簡易ATM取款機要求代碼實現 渲染表格案例要求代碼實現 封裝時間函數要求代碼實現 簡易ATM取款機 要求 1.彈出彈窗&#xff0c;讓用戶輸入數字選擇操作 2.初始值金額為100&#xff0c;計算每次操作后的剩余金額變化 3.一直彈出彈窗直到用戶輸入4&#xff0c;跳…