WebDriver API (2)

本文将继续上文对WebDriver API的功能使用进行介绍。

一、浏览器操作

1. 浏览器前进forward与后退back

浏览器前进操作是指导航到前一个页面,在浏览器的历史记录中向前移动一页。

浏览器后退操作是指导航到前一个页面,在浏览器的历史记录中向后移动一页。

示例代码:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;public class BrowserNavigation {public static void main(String[] args) {// 设置ChromeDriver的路径System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");// 初始化WebDriverWebDriver driver = new ChromeDriver();// 打开第一个网页driver.get("https://www.example.com");// 打开第二个网页driver.get("https://www.google.com");// 执行后退操作,返回到第一个网页driver.navigate().back();// 执行前进操作,返回到第二个网页driver.navigate().forward();// 关闭浏览器driver.quit();}
}

2. 操作滚动条

操作滚动条通常使用JavaScript执行,因为Selenium WebDriver没有直接的方法来操作滚动条。以下是滚动到页面底部、滚动到特定元素和滚动到页面顶部的示例。

示例代码:

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.By;public class ScrollExample {public static void main(String[] args) {// 设置ChromeDriver的路径System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");// 初始化WebDriverWebDriver driver = new ChromeDriver();// 打开一个网页driver.get("https://www.example.com");// 创建一个JavaScript执行器JavascriptExecutor js = (JavascriptExecutor) driver;// 滚动到页面底部js.executeScript("window.scrollTo(0, document.body.scrollHeight);");// 滚动到特定元素WebElement element = driver.findElement(By.id("someElementId"));js.executeScript("arguments[0].scrollIntoView(true);", element);// 滚动到页面顶部js.executeScript("window.scrollTo(0, 0);");// 关闭浏览器driver.quit();}
}

解释

  • 滚动条

    • window.scrollTo(0, document.body.scrollHeight);:滚动到页面底部。
    • arguments[0].scrollIntoView(true);:滚动到指定元素的位置。
    • window.scrollTo(0, 0);:滚动到页面顶部。

二、sendKey模拟按键操作

在Selenium WebDriver中,sendKeys 方法不仅可以用于输入文本,还可以用于模拟按键操作。Selenium 提供了一个 Keys 枚举类,其中包含了许多常见的键,如箭头键、功能键、回车键等。

常见按键及其对应的 Keys 枚举值

按键Keys 枚举值
回车键Keys.ENTER
空格键Keys.SPACE
退格键Keys.BACK_SPACE
删除键Keys.DELETE
选项键Keys.ALT
控制键Keys.CONTROL
转移键Keys.SHIFT
箭头上键Keys.ARROW_UP
箭头下键Keys.ARROW_DOWN
箭头左键Keys.ARROW_LEFT
箭头右键Keys.ARROW_RIGHT
Tab 键Keys.TAB
ESC 键Keys.ESCAPE
F1-F12 键Keys.F1Keys.F12

示例代码

以下是一些使用 sendKeys 方法来调用按键的示例:

1. 输入文本并按回车键

WebElement searchBox = driver.findElement(By.name("q")); 
searchBox.sendKeys("Selenium WebDriver"); searchBox.sendKeys(Keys.ENTER);
  • 作用:向名为 "q" 的输入框输入 "Selenium WebDriver" 后,模拟按下回车键。

2. 使用 Tab 键导航到下一个元素

WebElement input1 = driver.findElement(By.name("input1")); 
WebElement input2 = driver.findElement(By.name("input2"));
input1.sendKeys("First input"); 
input1.sendKeys(Keys.TAB); // 模拟按下Tab键,焦点将移动到下一个输入框 
input2.sendKeys("Second input");
  • 作用:在第一个输入框输入 "First input" 后,按下 Tab 键,将焦点移动到下一个输入框,然后输入 "Second input"。

3. 组合按键操作(例如复制和粘贴)

WebElement inputField = driver.findElement(By.name("input")); 
inputField.sendKeys("Text to be copied"); 
inputField.sendKeys(Keys.CONTROL + "a"); // 全选文本 
inputField.sendKeys(Keys.CONTROL + "c"); // 复制文本 
inputField.sendKeys(Keys.CONTROL + "v"); // 粘贴文本
  • 作用:在输入框中输入文本 "Text to be copied",然后使用组合键 Ctrl+A 选中所有文本,Ctrl+C 复制文本,最后使用 Ctrl+V 粘贴文本。

4. 使用箭头键进行导航

WebElement dropDown = driver.findElement(By.id("dropdown")); 
dropDown.click(); // 打开下拉菜单 
dropDown.sendKeys(Keys.ARROW_DOWN); // 模拟按下箭头下键 
dropDown.sendKeys(Keys.ARROW_DOWN); // 再次按下箭头下键 
dropDown.sendKeys(Keys.ENTER); // 选择当前选项
  • 作用:点击下拉菜单,使用箭头下键两次选择第三个选项,并按下回车键确认选择。

在Selenium WebDriver中,可以使用 sendKeys 方法和 Keys 枚举来模拟键盘组合键操作,如 Ctrl+C、Ctrl+V、Ctrl+A 等。组合键通常用于选择、复制、粘贴等操作。以下是一些常见的键盘组合键及其示例代码。

常见键盘组合键

操作组合键
全选Keys.CONTROL + "a"
复制Keys.CONTROL + "c"
粘贴Keys.CONTROL + "v"
剪切Keys.CONTROL + "x"
撤销Keys.CONTROL + "z"
重做Keys.CONTROL + "y"
新建窗口Keys.CONTROL + "n"
打开新标签Keys.CONTROL + "t"
关闭当前标签Keys.CONTROL + "w"
查找Keys.CONTROL + "f"
保存Keys.CONTROL + "s"
打开浏览器开发工具Keys.CONTROL + Keys.SHIFT + "i"

示例代码

1. 组合键 Ctrl+A 全选

WebElement inputField = driver.findElement(By.name("input")); 
inputField.sendKeys("Text to be selected"); 
inputField.sendKeys(Keys.CONTROL + "a"); // 全选文本

2. 组合键 Ctrl+C 复制

WebElement inputField = driver.findElement(By.name("input")); 
inputField.sendKeys("Text to be copied"); 
inputField.sendKeys(Keys.CONTROL + "a"); // 全选文本 
inputField.sendKeys(Keys.CONTROL + "c"); // 复制文本

3. 组合键 Ctrl+V 粘贴

WebElement inputField = driver.findElement(By.name("input")); 
inputField.sendKeys(Keys.CONTROL + "v"); // 粘贴文本

4. 组合键 Ctrl+A, Ctrl+C, Ctrl+V 组合操作

WebElement inputField1 = driver.findElement(By.name("input1")); 
WebElement inputField2 = driver.findElement(By.name("input2")); 
inputField1.sendKeys("Text to be copied"); 
inputField1.sendKeys(Keys.CONTROL + "a"); // 全选文本 
inputField1.sendKeys(Keys.CONTROL + "c"); // 复制文本 
inputField2.sendKeys(Keys.CONTROL + "v"); // 粘贴文本到第二个输入框

5. 组合键 Ctrl+F 查找

driver.findElement(By.tagName("body")).sendKeys(Keys.CONTROL + "f");

使用 Actions 类进行更复杂的组合键操作

对于一些更复杂的键盘操作,可以使用 Actions 类来实现。

示例:使用 Actions 类执行 Ctrl+A 和 Ctrl+C

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 KeyboardCombinationExample {public static void main(String[] args) {// 设置ChromeDriver的路径System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");// 初始化WebDriverWebDriver driver = new ChromeDriver();// 打开一个网页driver.get("https://www.example.com");// 找到输入框并输入文本WebElement inputField = driver.findElement(By.name("input"));inputField.sendKeys("Text to be copied");// 使用Actions类执行组合键Ctrl+A(全选)和Ctrl+C(复制)Actions actions = new Actions(driver);actions.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).perform();actions.keyDown(Keys.CONTROL).sendKeys("c").keyUp(Keys.CONTROL).perform();// 关闭浏览器driver.quit();}
}

三、通过Action类模拟鼠标动作

在Selenium中,鼠标事件是通过Actions类来实现的。这个类提供了模拟各种鼠标动作的方法,例如点击、双击、右键点击、拖放等。下面是一些常用的鼠标事件及其对应的方法:

  1. 点击(Click)

    • 单击(Click): 使用click()方法。
    • 双击(Double Click): 使用doubleClick()方法。
    • 右键点击(Context Click): 使用contextClick()方法。
  2. 移动(Move)

    • 移动到元素(Move to Element): 使用moveToElement(WebElement target)方法,可以将鼠标移动到指定的元素上。
    • 移动并点击(Move to Element and Click): 结合moveToElement()click()方法,可以移动到元素并进行点击。
  3. 拖放(Drag and Drop)

    • 直接拖放(Drag and Drop): 使用dragAndDrop(WebElement source, WebElement target)方法,将元素从一个位置拖到另一个位置。
    • 拖放到偏移位置0t): 使用dragAndDropBy(WebElement source, int xOffset, int yOffset)方法,将元素拖放到指定的偏移位置。
  4. 点击并保持(Click and Hold)

    • 点击并保持(Click and Hold): 使用clickAndHold()方法,在指定元素上点击并保持鼠标按钮不放。
    • 释放(Release): 使用release()方法,释放鼠标按钮。

下面是一个示例代码,演示如何使用Actions类来执行这些鼠标事件:

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.interactions.Actions;public class MouseActionsExample {public static void main(String[] args) {// 设置ChromeDriver的路径System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");// 创建WebDriver实例WebDriver driver = new ChromeDriver();// 打开一个网站driver.get("https://example.com");// 创建Actions实例Actions actions = new Actions(driver);// 定位元素WebElement element = driver.findElement(By.id("elementId"));// 单击元素actions.click(element).perform();// 双击元素actions.doubleClick(element).perform();// 右键点击元素actions.contextClick(element).perform();// 移动到元素并点击actions.moveToElement(element).click().perform();// 拖放元素WebElement source = driver.findElement(By.id("sourceElementId"));WebElement target = driver.findElement(By.id("targetElementId"));actions.dragAndDrop(source, target).perform();// 拖放到偏移位置actions.dragAndDropBy(source, 100, 50).perform();// 点击并保持,然后释放actions.clickAndHold(element).release().perform();// 关闭浏览器driver.quit();}
}

perform()方法是一个触发器,用来执行之前定义的所有动作。

四、打印信息

在Selenium中,可以获取并打印许多关于当前网页的信息,如页面标题(title)、当前URL、页面源码、页面的Cookie等。

示例代码

下面是一个综合示例,演示了如何获取并打印这些信息:

import org.openqa.selenium.By;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;import java.util.Set;public class WebPageInfo {public static void main(String[] args) {// 设置ChromeDriver的路径System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");// 创建WebDriver实例WebDriver driver = new ChromeDriver();// 打开一个网站driver.get("https://example.com");// 获取并打印页面标题String title = driver.getTitle();System.out.println("Page Title: " + title);// 获取并打印当前URLString currentUrl = driver.getCurrentUrl();System.out.println("Current URL: " + currentUrl);// 获取并打印页面源码String pageSource = driver.getPageSource();System.out.println("Page Source: " + pageSource);// 获取并打印页面的CookieSet<Cookie> cookies = driver.manage().getCookies();for (Cookie cookie : cookies) {System.out.println("Cookie: " + cookie);}// 获取并打印特定元素的文本WebElement element = driver.findElement(By.id("elementId"));String elementText = element.getText();System.out.println("Element Text: " + elementText);// 关闭浏览器driver.quit();}
}

五、多层框架的定位

1. 框架概念

什么是框架(Frame)?

在一个网页上,框架(Frame)是一个网页中嵌套的子网页。想象一下你有一个大盒子(网页),里面装着几个小盒子(框架)。每个小盒子里又可以装着更多的小盒子或内容。框架帮助网页设计者将网页内容分成多个独立的部分,每个部分可以单独加载和操作。

为什么要使用框架?

  1. 组织内容:框架可以帮助将一个复杂的网页分成多个部分,使得每个部分可以独立加载和操作。例如,导航栏可以放在一个框架中,内容区域可以放在另一个框架中。

  2. 提高效率:由于每个框架可以独立加载,所以页面的一部分更新时,其他部分不需要重新加载,提高了网页的效率。

多层框架(Nested Frames)

多层框架是指在一个框架里再嵌套另一个框架,就像一个盒子里放着另一个盒子。这种情况可能会使得操作网页变得复杂,因为你需要告诉浏览器你想在哪个框架里操作。

举个例子

想象你正在操作一个带有导航栏和内容区域的网页:

  • 外层框架:这是整个网页的框架。
  • 内层框架1:在网页的左边有一个导航栏,这是一个独立的框架。
  • 内层框架2:在网页的右边有一个内容区域,这是另一个独立的框架。

当你想点击导航栏中的一个链接时,你需要先告诉浏览器你要操作的是导航栏框架,然后才能点击链接。同样,如果你想操作内容区域的某个按钮,你需要先切换到内容区域的框架,再进行操作。

在Selenium WebDriver中,处理多层框架和窗口定位、层级定位和下拉框处理是非常常见的任务。下面将详细介绍这些概念及其相关API的使用方法。

2. 多层框架的定位

在Web应用中,页面通常嵌套在多个框架(frame)中。为了在这些框架中进行操作,我们需要切换到相应的框架。

  1. 切换到框架: 使用driver.switchTo().frame()方法可以切换到指定的框架。可以通过框架的名字、ID或者WebElement对象来定位框架。

    // 通过框架的名字或ID切换到框架
    driver.switchTo().frame("frameNameOrId");// 通过WebElement对象切换到框架
    WebElement frameElement = driver.findElement(By.xpath("//iframe[@name='frameName']"));
    driver.switchTo().frame(frameElement);
    
  2. 切换回默认内容: 使用driver.switchTo().defaultContent()方法可以从嵌套的框架中跳回到最外层的默认页面。

driver.switchTo().defaultContent();

3. 多层窗口的定位

当页面中嵌套的不是框架而是窗口时,需要使用不同的方法来切换窗口。

  1. 切换到窗口: 使用driver.switchTo().window()方法可以切换到指定的窗口。可以通过窗口的名字或句柄(handle)来定位窗口。

// 获取当前窗口句柄
String currentWindow = driver.getWindowHandle();// 获取所有打开的窗口句柄
Set<String> allWindows = driver.getWindowHandles();// 遍历所有窗口句柄并切换到新窗口
for (String window : allWindows) {driver.switchTo().window(window);// 如果需要,可以在此处添加条件判断,确保切换到正确的窗口
}// 切换回原窗口
driver.switchTo().window(currentWindow);

4. 层级定位

在某些情况下,需要一层层地定位到具体的元素。例如,某些元素只有在特定操作之后才会显示。

// 定位父元素
WebElement parentElement = driver.findElement(By.id("parentElementId"));// 在父元素下定位子元素
WebElement childElement = parentElement.findElement(By.className("childElementClass"));// 进一步定位孙元素
WebElement grandChildElement = childElement.findElement(By.tagName("tag"));

5. 下拉框处理

下拉框是常见的页面元素,需要进行两次定位:一次定位到下拉框,然后定位到下拉框中的选项。

  1. 定位到下拉框并进行操作: 使用Select类来处理下拉框。

import org.openqa.selenium.support.ui.Select;// 定位下拉框元素
WebElement dropdown = driver.findElement(By.id("dropdownId"));// 创建Select对象
Select select = new Select(dropdown);// 通过可见文本选择选项
select.selectByVisibleText("OptionText");// 通过值选择选项
select.selectByValue("optionValue");// 通过索引选择选项
select.selectByIndex(1);

综合示例

package org.example;import org.openqa.selenium.By;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.Select;import java.util.Set;public class BaiduExample {public static void main(String[] args) {// 设置ChromeDriver的路径System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");// 创建WebDriver实例WebDriver driver = new ChromeDriver();// 打开百度首页driver.get("https://www.baidu.com");// 获取并打印页面标题和当前URLString title = driver.getTitle();System.out.println("Page Title: " + title);String currentUrl = driver.getCurrentUrl();System.out.println("Current URL: " + currentUrl);// 定位搜索输入框并输入关键词WebElement searchBox = driver.findElement(By.id("kw"));searchBox.sendKeys("Selenium WebDriver");// 定位搜索按钮并点击WebElement searchButton = driver.findElement(By.id("su"));searchButton.click();// 暂停几秒等待搜索结果加载(实际项目中应使用显式等待)try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}// 获取当前窗口句柄String currentWindow = driver.getWindowHandle();// 获取所有打开的窗口句柄Set<String> allWindows = driver.getWindowHandles();// 如果有新窗口,切换到新窗口for (String window : allWindows) {if (!window.equals(currentWindow)) {driver.switchTo().window(window);break;}}// 打印搜索结果页面的标题String resultTitle = driver.getTitle();System.out.println("Result Page Title: " + resultTitle);// 处理可能存在的下拉框选项(这里假设有下拉框,仅为示例)try {WebElement dropdown = driver.findElement(By.id("dropdownId"));Select select = new Select(dropdown);select.selectByVisibleText("OptionText");} catch (Exception e) {System.out.println("No dropdown found or failed to interact with dropdown.");}// 关闭浏览器driver.quit();}
}

六、弹出框(Alert、Confirm、Prompt)的处理

在自动化测试中,处理浏览器弹出框(如 alert、confirm、prompt)是一个常见需求。Selenium WebDriver 提供了相应的方法来处理这些弹出框。

处理 alert、confirm、prompt 弹出框的方法:

1. 获取弹出框中的文字信息:

  • getText() 方法用于获取弹出框中的文字信息。
Alert alert = driver.switchTo().alert();
String alertText = alert.getText();
System.out.println(alertText);

2. 接受弹出框:

  • accept() 方法用于点击弹出框中的确认按钮。
alert.accept();

3. 拒绝弹出框:

  • dismiss() 方法用于点击弹出框中的取消按钮(如果有)
alert.dismiss();

4. 在弹出框中输入值:

  • sendKeys() 方法用于在弹出框的输入框中输入值。这仅适用于 prompt 弹出框。
alert.sendKeys("Some text");
alert.accept();

七、处理 DIV 对话框

有时页面上的元素很多,通过属性无法准确定位元素,这时可以先定位元素所在的 div 块,然后再定位这个元素。这种方法有助于提高定位的准确性。

示例:

WebElement divBlock = driver.findElement(By.id("divID"));
WebElement targetElement = divBlock.findElement(By.className("targetClass"));
targetElement.click();

八、上传文件操作

文件上传操作在 web 应用中也很常见。Selenium WebDriver 处理文件上传并不复杂,关键是通过 sendKeys() 方法将文件路径传递给文件上传输入框。

WebElement uploadButton = driver.findElement(By.id("uploadButton"));
uploadButton.sendKeys("C:\\path\\to\\file.txt");

这里有几点需要注意:

  • 文件路径可以是绝对路径或相对路径。
  • 上传的文件必须存在于指定路径中。
  • sendKeys() 方法用于直接输入文件路径。

示例代码

下面是一个综合示例,展示如何处理 alert 弹出框以及文件上传操作:

import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;public class SeleniumExample {public static void main(String[] args) {// 设置ChromeDriver的路径System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");// 创建WebDriver实例WebDriver driver = new ChromeDriver();// 打开示例网页driver.get("https://example.com");// 处理 alert 弹出框WebElement alertButton = driver.findElement(By.id("alertButton"));alertButton.click();Alert alert = driver.switchTo().alert();System.out.println(alert.getText());  // 打印弹出框中的文字信息alert.accept();  // 点击确认按钮// 文件上传操作WebElement uploadButton = driver.findElement(By.id("uploadButton"));uploadButton.sendKeys("C:\\path\\to\\file.txt");  // 上传文件// 关闭浏览器driver.quit();}
}

 附录

1. 设置ChromeDriver的路径

在使用Selenium进行自动化测试时,我们需要一个浏览器驱动程序(比如ChromeDriver)来控制浏览器的操作。浏览器驱动程序是与浏览器进行通信的桥梁。我们需要告诉Selenium在哪里可以找到这个驱动程序,这就是 System.setProperty 的作用。

System.setProperty 方法

System.setProperty 方法用于设置系统属性。它接受两个参数:

  • 第一个参数是系统属性的名称。
  • 第二个参数是系统属性的值。

在这个例子中,我们设置的是 webdriver.chrome.driver 系统属性,它的值是ChromeDriver可执行文件的路径。

具体代码解释
// 设置ChromeDriver的路径 
System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");

这行代码的含义是告诉Selenium,ChromeDriver可执行文件位于 /path/to/chromedriver。我们需要将 /path/to/chromedriver 替换为本地计算机上ChromeDriver可执行文件的实际路径。

重要提示

  • 确保下载的ChromeDriver版本与Chrome浏览器的版本匹配。
  • 将ChromeDriver放在一个合适的位置,并确保路径正确。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/39473.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM专题之走进类加载

1.1 Java及JVM简介 TIOBE语言热度排行榜:https://www.tiobe.com/tiobe-index/ 世界上没有最好的编程语言&#xff0c;如果有&#xff0c;我相信一定是JAVA。 1.2 Java发展的重大事件 1995年5月23日&#xff0c;Java语言诞生 1996年1月&#xff0c;第一个JDK-JDK1.0诞生 1996…

C语言编程-基于单链表实现贪吃蛇游戏

基于单链表实现贪吃蛇游戏 1.定义结构体参数 蛇行走的方向 蛇行走的状态 蛇身节点类 维护蛇的结构体型 2.游戏运行前预备工作 定位光标位置 游戏欢迎界面 绘制游戏地图&#xff08;边界&#xff09; 初始化游戏中的蛇身 创建食物 3.游戏运行 下一个位置是食物&#xff0c;就吃掉…

ArcGIS中将测绘数据投影坐标(平面坐标)转地理坐标(球面经纬度坐标)

目录 前言1.测绘数据预览1.1 确定带号1.2 为什么是对Y轴分带&#xff0c;而不是对X轴分带&#xff1f; 2 测绘数据转shp2.1 添加数据2.2 显示XY数据2.3 添加经纬度字段2.4 计算经纬度 3.shp数据重投影4.总结 前言 最近在刚好在做一个小功能&#xff0c;将测绘数据转为经纬度坐标…

浙江建筑安全员A证2024年最新考试题库练习

46.总承包单位依法将建设工程分包给其他单位的&#xff0c;分包合同中应当明确各自的安全生产方面的权利、义务。总承包单位对分包工程的安全生产承担&#xff08;&#xff09;责任。 A.全部 B.主要 C.部分 D.连带 答案&#xff1a;D 47.实施总承报的建设工程发生事故&…

Git命令远程分支的合并和本地分支的同步

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

怎么压缩ppt文件大小?这四种压缩方法真的超级好用!

怎么压缩ppt文件大小&#xff1f;当我们精心打造PPT时&#xff0c;随着创意的涌动和内容的充实&#xff0c;常常会发现PPT文件的大小也在不知不觉间悄然膨胀&#xff0c;这背后其实隐藏着诸多因素&#xff0c;首先&#xff0c;我们可能过于追求视觉效果&#xff0c;不经意间在P…

【信息学奥赛】CSP-J/S初赛05 计算机原码、补码和反码

本专栏&#x1f449;CSP-J/S初赛内容主要讲解信息学奥赛的初赛内容&#xff0c;包含计算机基础、初赛常考的C程序和算法以及数据结构&#xff0c;并收集了近年真题以作参考。 如果你想参加信息学奥赛&#xff0c;但之前没有太多C基础&#xff0c;请点击&#x1f449;专栏&#…

IPython交互式Shell的高级功能:探索Python交互式编程的边界

&#x1f680; IPython交互式Shell的高级功能&#xff1a;探索Python交互式编程的边界 IPython是一个强大的Python交互式解释器&#xff0c;它提供了许多高级功能&#xff0c;使得Python编程更加高效和有趣。这些功能包括但不限于改进的交互式Shell、Jupyter笔记本、魔术命令、…

线性代数大题细节。

4.4 方程组解的结构&#xff08;二&#xff09;_哔哩哔哩_bilibili

c++将一个复杂的结构体_保存成二进制文件并读取

在 C 中&#xff0c;可以将复杂的结构体保存到二进制文件中&#xff0c;并从二进制文件中读取它。为了实现这一点&#xff0c;你可以使用文件流库 <fstream>。以下是一个示例&#xff0c;展示如何将一个复杂的结构体保存到二进制文件中&#xff0c;并从二进制文件中读取它…

【高中数学/三角函数】已知:实数a,b,c满足a+b+c=0,且a^2+b^2+c^2=1 求:a的最大值?

【问题】 已知&#xff1a;实数a,b,c满足abc0,且a^2b^2c^21 求&#xff1a;a的最大值&#xff1f; 【问题来源】 https://www.ixigua.com/7289764285772497448?logTag0d228277f3a8e049ab6d 【解答】 解&#xff1a;由abc0可得c-(ab) 代入a^2b^2c^21得a^2b^2(ab)^21 又…

深入MOJO编程语言的单元测试世界

引言 在软件开发的历程中&#xff0c;单元测试扮演着至关重要的角色。单元测试不仅帮助开发者确保代码的每个部分都按预期工作&#xff0c;而且也是代码质量和维护性的关键保障。本文将引导读者了解如何在MOJO这一假想编程语言中编写单元测试&#xff0c;尽管MOJO并非真实存在…

Docker在windows上使用vscode远程连接容器

目录 一、提前准备&#xff1a; 二、vscode连接docker容器 三、构建好的docker容器直接连接vscode 四、Windows下的可视化出linux的ui界面 在日常的开发中&#xff0c;不想windows和linux两个系统之间来回切换&#xff0c;笔者最近打算所有的环境均在一个系统上完成。为了交…

Nosql期末复习

mongodb基本常用命令&#xff08;只要掌握所有实验内容就没问题&#xff09; 上机必考&#xff0c;笔试试卷可能考&#xff1a; 1.1 数据库的操作 1.1.1 选择和创建数据库 &#xff08;1&#xff09;use dbname 如果数据库不存在则自动创建&#xff0c;例如&#xff0c;以下…

学习无人机飞行技术,有哪些就业方向?

随着无人机技术的不断进步和应用领域的拓展&#xff0c;研发创新人才的需求也将不断增加&#xff0c;那就业前景还是很广阔的。学习无人机飞行技术后&#xff0c;有以下多个就业方向可供选择&#xff1a; 1. 无人机操作员&#xff1a; - 负责操控和监控无人机飞行&#xff0c;…

基于索尼基于索尼Spresense的眼睛跟随平台中两个模型的对比

1.模型一(现在使用的) 这个模型是一个简单的神经网络&#xff0c;由三个主要组件组成&#xff1a;输入层、一个全连接层&#xff08;Affine层&#xff09;、一个Sigmoid激活函数层和一个Binary Cross Entropy损失层。 以下是每个组件的说明&#xff1a; Input 层&#xff1a;这…

ubuntu 更换软件源

ubuntu 更换软件源 在Ubuntu 20.04 LTS中更换软件源可以通过图形界面或命令行进行。更换软件源通常是为了加快软件包的下载速度或解决软件源不可用的问题。这里我将分别说明如何通过图形界面和命令行更换软件源。 通过图形界面更换软件源&#xff1a; 打开“软件和更新”设置…

【LeetCode】验证回文串

目录 一、题目二、解法完整代码 一、题目 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&#xff0c;如果它是 回文串 &…

问题集锦1

01.inner中使用JwtTokenUtil.getUserCode() 前端调用上传&#xff08;java&#xff09;&#xff0c;上传使用加购 Overridepublic Boolean insertShoppingCart(InsertShoppingCartParamsDto dto) {// 通过userCode,itemCode和supplierCode来判断当前加购人添加到购物车的商品是…

51单片机第23步_定时器1工作在模式0(13位定时器)

重点学习51单片机定时器1工作在模式0的应用。 在51单片机中&#xff0c;定时器1工作在模式0&#xff0c;它和定时器0一样&#xff0c;TL1占低5位&#xff0c;TH1占高8位&#xff0c;合计13位&#xff0c;也是向上计数。 1、定时器1工作在模式0 1)、定时器1工作在模式0的框图…