日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Selenium3升級(jí)到Selenium4應(yīng)注意哪些

一、前言

在自動(dòng)化技術(shù)的不斷發(fā)展過(guò)程中,我們往往也會(huì)遇到或做過(guò)自動(dòng)化版本升級(jí)的任務(wù),也會(huì)遇到各種各樣的問(wèn)題。

成都一家集口碑和實(shí)力的網(wǎng)站建設(shè)服務(wù)商,擁有專業(yè)的企業(yè)建站團(tuán)隊(duì)和靠譜的建站技術(shù),10多年企業(yè)及個(gè)人網(wǎng)站建設(shè)經(jīng)驗(yàn) ,為成都1000多家客戶提供網(wǎng)頁(yè)設(shè)計(jì)制作,網(wǎng)站開發(fā),企業(yè)網(wǎng)站制作建設(shè)等服務(wù),包括成都營(yíng)銷型網(wǎng)站建設(shè),品牌網(wǎng)站制作,同時(shí)也為不同行業(yè)的客戶提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作的服務(wù),包括成都電商型網(wǎng)站制作建設(shè),裝修行業(yè)網(wǎng)站制作建設(shè),傳統(tǒng)機(jī)械行業(yè)網(wǎng)站建設(shè),傳統(tǒng)農(nóng)業(yè)行業(yè)網(wǎng)站制作建設(shè)。在成都做網(wǎng)站,選網(wǎng)站制作建設(shè)服務(wù)商就選成都創(chuàng)新互聯(lián)。

對(duì)于 Web 自動(dòng)化測(cè)試,目前很多公司還是很熱衷使用 Selenium。較新開發(fā)的測(cè)試腳本可能都在使用 Selenium 4 版本,但是對(duì)于已經(jīng)完成或者舊的測(cè)試腳本可能仍是 Selenium 3 版本,甚至是 Selenium 2 版本。

使用 Selenium 3 升級(jí) Selenium 4 時(shí),在某些情況下可能會(huì)發(fā)生一些問(wèn)題,對(duì)于版本的升級(jí)后,會(huì)有一些棄用和更改等,本篇進(jìn)行總結(jié)。

二、關(guān)于支持的協(xié)議

Selenium 4 取消了對(duì)舊的協(xié)議(JSON Wire 協(xié)議)的支持,默認(rèn)情況下使用 W3C WebDriver 標(biāo)準(zhǔn)(協(xié)議)。對(duì)于大多數(shù)情況,此實(shí)現(xiàn)不會(huì)影響最終用戶,主要的例外是 Capabilities 類和 Actions 類。

三、Capabilities

如果測(cè)試功能的結(jié)構(gòu)不符合 W3C,可能會(huì)導(dǎo)致會(huì)話無(wú)法啟動(dòng)。

以下是 W3C WebDriver 標(biāo)準(zhǔn)功能列表:

browserName
browserVersion (替換 version)
platformName (替換 platform)
acceptInsecureCerts
pageLoadStrategy
proxy
timeouts
unhandledPromptBehavior

修改前(Java):

DesiredCapabilities caps = DesiredCapabilities.firefox();
caps.setCapability("platform", "Windows 10");
caps.setCapability("version", "92");
caps.setCapability("build", myTestBuild);
caps.setCapability("name", myTestName);
WebDriver driver = new RemoteWebDriver(new URL(cloudUrl), caps);

修改后(Java):

FirefoxOptions browserOptions = new FirefoxOptions();
browserOptions.setPlatformName("Windows 10");
browserOptions.setBrowserVersion("92");
Map cloudOptions = new HashMap<>();
cloudOptions.put("build", myTestBuild);
cloudOptions.put("name", myTestName);
browserOptions.setCapability("cloud:options", cloudOptions);
WebDriver driver = new RemoteWebDriver(new URL(cloudUrl), browserOptions);

四、在Java中查找元素的方法

在 Java 中,查找元素的方法(FindsBy 接口)已被刪除,因?yàn)樗鼈儍H用于內(nèi)部使用。

1、查找單個(gè)元素 findElement*

修改前(Java):

driver.findElementByClassName("className");
driver.findElementByCssSelector(".className");
driver.findElementById("elementId");
driver.findElementByLinkText("linkText");
driver.findElementByName("elementName");
driver.findElementByPartialLinkText("partialText");
driver.findElementByTagName("elementTagName");
driver.findElementByXPath("xPath");

修改后(Java):

driver.findElement(By.className("className"));
driver.findElement(By.cssSelector(".className"));
driver.findElement(By.id("elementId"));
driver.findElement(By.linkText("linkText"));
driver.findElement(By.name("elementName"));
driver.findElement(By.partialLinkText("partialText"));
driver.findElement(By.tagName("elementTagName"));
driver.findElement(By.xpath("xPath"));

2、查找多個(gè)元素 findElements*

修改前(Java):

driver.findElementsByClassName("className");
driver.findElementsByCssSelector(".className");
driver.findElementsById("elementId");
driver.findElementsByLinkText("linkText");
driver.findElementsByName("elementName");
driver.findElementsByPartialLinkText("partialText");
driver.findElementsByTagName("elementTagName");
driver.findElementsByXPath("xPath");

修改后(Java):

driver.findElements(By.className("className"));
driver.findElements(By.cssSelector(".className"));
driver.findElements(By.id("elementId"));
driver.findElements(By.linkText("linkText"));
driver.findElements(By.name("elementName"));
driver.findElements(By.partialLinkText("partialText"));
driver.findElements(By.tagName("elementTagName"));
driver.findElements(By.xpath("xPath"));

五、升級(jí)依賴

檢查安裝 Selenium 4 并升級(jí)你的項(xiàng)目依賴項(xiàng)。

1、Java

升級(jí) Selenium 的過(guò)程取決于正在使用的構(gòu)建工具。這里介紹 Java 中最常見的 Maven 和 Gradle。所需的最低 Java 版本仍然是 8。

(1)Maven

修改前:




org.seleniumhq.selenium
selenium-java
3.141.59


修改后:




org.seleniumhq.selenium
selenium-java
4.0.0


進(jìn)行更改后,可以在 pom.xml 文件所在的同一目錄上執(zhí)行 mvn clean compile 命令。

(2)Gradle

修改前:

plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
implementation group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '3.141.59'
}
test {
useJUnitPlatform()
}

修改后:

plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
implementation group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '4.0.0'
}
test {
useJUnitPlatform()
}

進(jìn)行更改后,可以在 build.gradle 文件所在的同一目錄上執(zhí)行 ./gradlew clean build 命令。

2、Python

使用 Python 最重要的變化是最低版本的要求。

Selenium 4 至少需要 Python 3.7 或更高版本。

從命令行升級(jí),可以執(zhí)行:

pip install selenium==4.0.0

六、潛在錯(cuò)誤和棄用消息

1、Java

(1)等待和超時(shí)

超時(shí)中接收到的參數(shù)已從預(yù)期(長(zhǎng)時(shí)間,時(shí)間單位)切換到預(yù)期(持續(xù)時(shí)間)。

修改前:

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().timeouts().setScriptTimeout(2, TimeUnit.MINUTES);
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);

修改后:

driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
driver.manage().timeouts().scriptTimeout(Duration.ofMinutes(2));
driver.manage().timeouts().pageLoadTimeout(Duration.ofSeconds(10));

(2)等待現(xiàn)在也需要不同的參數(shù),WebDriverWait 現(xiàn)在期望的是持續(xù)時(shí)間,而不是以秒和毫秒為單位的長(zhǎng)時(shí)間。

FluentWait 中的 withTimeout 和 pollingEvery 方法已從預(yù)期(長(zhǎng)時(shí)間,時(shí)間單位)切換到預(yù)期(持續(xù)時(shí)間)。

修改前:

new WebDriverWait(driver, 3).until(ExpectedConditions.elementToBeClickable(By.cssSelector("#id")));
Wait wait = new FluentWait(driver)
.withTimeout(30, TimeUnit.SECONDS)
.pollingEvery(5, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class);

修改后:

new WebDriverWait(driver, Duration.ofSeconds(3)).until(ExpectedConditions.elementToBeClickable(By.cssSelector("#id")));

Wait wait = new FluentWait(driver)
.withTimeout(Duration.ofSeconds(30))
.pollingEvery(Duration.ofSeconds(5))
.ignoring(NoSuchElementException.class);

(2)合并功能不再更改調(diào)用對(duì)象

可以將一組不同的功能合并到另一個(gè)功能集中,這會(huì)改變調(diào)用對(duì)象?,F(xiàn)在,需要指定合并操作的結(jié)果。

修改前(結(jié)果,options 對(duì)象被修改了):

MutableCapabilities capabilities = new MutableCapabilities();
capabilities.setCapability("platformVersion", "Windows 10");
FirefoxOptions options = new FirefoxOptions();
options.setHeadless(true);
options.merge(capabilities);

修改后(調(diào)用的結(jié)果,merge 需要分配給一個(gè)對(duì)象):

(3)火狐舊版

MutableCapabilities capabilities = new MutableCapabilities();
capabilities.setCapability("platformVersion", "Windows 10");
FirefoxOptions options = new FirefoxOptions();
options.setHeadless(true);
options = options.merge(capabilities);

在 GeckoDriver 出現(xiàn)之前,Selenium 項(xiàng)目有一個(gè)驅(qū)動(dòng)程序來(lái)實(shí)現(xiàn)自動(dòng)化 Firefox(版本 < 48)。但是,不再需要此實(shí)現(xiàn),因?yàn)樗谧钚掳姹镜?Firefox 中不起作用。為避免升級(jí)到 Selenium 4 時(shí)出現(xiàn)重大問(wèn)題,該 setLegacy 選項(xiàng)將顯示為已棄用。建議停止使用舊的實(shí)現(xiàn),只依賴 GeckoDriver。

以下代碼將顯示 setLegacy,升級(jí)后不被推薦使用。

FirefoxOptions options = new FirefoxOptions();
options.setLegacy(true);

(4)BrowserType

該 BrowserType 接口已經(jīng)存在了很長(zhǎng)時(shí)間,但它已被棄用,取而代之的是新 Browser 接口。

修改前:

MutableCapabilities capabilities = new MutableCapabilities();
capabilities.setCapability("browserVersion", "92");
capabilities.setCapability("browserName", BrowserType.FIREFOX);

修改后:

MutableCapabilities capabilities = new MutableCapabilities();
capabilities.setCapability("browserVersion", "92");
capabilities.setCapability("browserName", Browser.FIREFOX);

2、Python

executable_path 已被棄用,請(qǐng)傳入 Service 對(duì)象。

在 Selenium 4 中,需要 executable_path 從 Service 對(duì)象設(shè)置驅(qū)動(dòng)程序以防止出現(xiàn)棄用警告(或者不要設(shè)置路徑,而是確保所需的驅(qū)動(dòng)程序位于系統(tǒng)路徑上)。

修改前:

from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)
driver = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH, options=options)

修改后:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)
service = ChromeService(executable_path=CHROMEDRIVER_PATH)
driver = webdriver.Chrome(service=service, options=options)

分享名稱:Selenium3升級(jí)到Selenium4應(yīng)注意哪些
文章URL:http://www.5511xx.com/article/djpggoj.html