u盘启动failtostart (华硕bios设置U盘启动)


#人人能科普,处处有新知#

Selenium WebDriver 仍然是处理 UI 自动化测试的最流行的工具之一。特别是使用 Selenium 4,WebDriver 通过解决许多新问题继续在测试界受到欢迎。

另一方面,如果您是 WebDriver 用户,您无疑会遇到一些问题,或者很快就会遇到。在本文中,我将分享您在使用它时可能遇到的5个问题,以及它们的解决方案。那么让我们开始吧!

1. SSL 证书问题


当 web 浏览器无法验证安装在网站上的 SSL 证书时,就会发生 SSL 证书错误。然后,当 WebDriver 试图打开一个网站时,浏览器会显示这个错误信息:

这个问题是在本地环境中测试时经电脑常遇到的问题之一。虽然这看起来像是一个障碍,但是你可以使用 WebDriver 轻松地克服它。首先我们需要创建一个 ChromeOptions 类对象:

ChromeOptions handlingSSL = new ChromeOptions();

然后,我们使用 ACCEPT _ insecure _ certs 方法接受不可信的证书:

handlingSSL.setCapability(CapabilityType.ACCEPT_INSECURE_CERTS, true);


现在我们需要设置如下的路径的 chrome 驱动程序:

String pathForChromeDriverSSL= 1 ="write here your chromeDriver path" ;

System.setProperty("webdriver.chrome.driver" “ webdriver.chromedriver”, System.getProperty("user.dir")+pathForChromeDriverSSL + pathForChromeDriverSSL);

在路径设置之后,我们用 ChromeOptions 对象创建一个 Chrome 驱动程序的实例:

WebDriver driver = new ChromeDriver(handlingSSL);

我们已经准备好用“ get ()”的方法打开网站:

driver.get("URL");

您可以将上述步骤应用于您的 Driver 类,并在需要时使用它们。

驱动程序不是可执行的问题电脑

如果你不想经常下载最新的 Chrome 驱动程序版本,Bonigarcia WebDriver 管理器在很多方面都是一个很好的解决方案。然而,它也有一些局限性。例如,当您需要在 Apache Tomcat 这样的服务器或 Docker 在这样的容器上工作时,您必须下载第三方 WebDriver。

如果你在 Linux 上使用 Chrome 驱动程序,那么在版本控制(Git、 SVN 等等)中最有可能遇到的问题就是驱动程序不可执行:

java.lang.IllegalStateException: 驱动程序不是可执行的

我保证当你在谷歌上搜索这个例外时,你会迷路的。当然,有许多复杂的方法可以解决这个问题,但是您可以通过您的 Driver 类中使用简单的实现轻松地克服它。解决方案 -

你需要导入类 java.io.File:

String pathTheChromeDriverForLinux= "the path of your 3 party chrome driver for Linux";File file= new File(System.getProperty("user.dir")+pathTheChromeDriverForLinux);file.setExecutable(true);3. Docker 容器问题的 WebDriver Bug

Docker 是当今最流行的容器,为软件开发和 CI/CD 过程提供了有用的解决方案。但是,如果您想通过一个在 Docker 上运行的 Jenkins 来运行 ChromeDriver,您可能会感到失望,因为它不能工作。您将看到以下错误的消息:

Selenium::WebDriver::Error::UnknownError:unknown error: DevToolsActivePort file doesn't existunknown error: DevToolsActivePort file doesn't exist(Driver info: chromedriver=2.40.565383 (76257d1ab79276b2d53ee976b2c3e3b9f335cde7),platform=Linux 4.4.0-121-generic x86_64) (WARNING: The server did not provide any stacktrace information)Command duration or timeout: 60.04 secondsBuild info: version: '3.8.1', revision: '6e95a6684b', time: '2017-12-01T18:33:54.468Z'System info: host: 'ubuntu-test', ip: 'X.X.X.X', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-121-generic', java.version: '1.8.0_171'Driver info: driver.version: ChromeDriver...The reason is a ChromeDriver bug on Docker. Whenever ChromeDriver tries to run within Docker, the driver will fail to start because of the error “DevToolsActivePort file doesn’t exist”. If you want to travel the history of the error, here are some StackOverflow links for you:

原因是 Docker 上的 ChromeDriver bug。每当 ChromeDriver 试图在 Docker 中运行时,驱动程序将无法启动,因为“ DevToolsActivePort 文件不存在”的错误。如果你想了解这个错误的历史,这里有一些东西 StackOverflow 的链接:

Unknown error: DevToolsActivePort file doesn’t exist error while executing Selenium UI test cases on ubuntu

https://stackoverflow.com/questions/50790733/unknown-error-devtoolsactiveport-file-doesnt-exist-error-while-executing-selen

Capybara headless chrome in docker returns DevToolsActivePort file doesn’t exist

https://stackoverflow.com/questions/50610316/capybara-headless-chrome-in-docker-returns-devtoolsactiveport-file-doesnt-exist/50628877

但是如果你对解决方案直接感兴趣,这里是解决方案


同样,我们也需要使用 setHeadless ()方法创建一个 ChromeOptions 类的对象作为“ true”:

ChromeOptions chromeOptions = new ChromeOptions().setHeadless(true);


我们需要在 chromeOptions 中添加参数“-no-sandbox”和“-disable-dev-shm-usage”,如下所示:

chromeOptions.addArguments("--no-sandbox","--disable-dev-shm-usage");

添加参数后,我们用 chromeOptions 对象创建一个 Chrome 驱动程序实例:

WebDriver driver = new ChromeDriver(chromeOptions);

现在你没有麻烦了!

4. 屏幕分辨率不同的问题

对于软件测试自动化工程师来说,最大的噩梦之一就是在本地通过测试,但在远程测试中失败。仅仅在本地计算机上进行自动化测试是不够的,还必须编写通用测试。我的意思是,您的测试需要在不同的环境(浏览器、移动设备或操作系统)中执行。

在另一台计算机上运行测试时会遇到的一个差异(这个差异肯定会影响测试)是屏幕分辨率。最常见的问题是 Selenium 无法在较小的屏幕分辨率下找到以前发现的 web 元素。

当然,你可以通过使用 javascriptor 可以开发各种各样的解决方案来找到 web 元素。但是,如果您遇到了 NoSuchElementException 以外的问题,那么这些解决方案将不起作用。

在这种情况下,最好的方法是使用 DesiredCapabilities 类。渴望的功能为 Selenium WebDriver 提供了有关执行测试时所使用的环境的说明。

例如,在运行测试之前,可以根据计算机设置浏览器屏幕分辨率。对于这一点,向 Driver 添加几行新代码就足够了,如下-

假设你想把屏幕分辨率改为1280 × 800,你需要像这样设置 DesiredCapabilities:

DesiredCapabilities desiredCaps = new DesiredCapabilities();desiredCaps.setCapability("os", "Windows");desiredCaps.setCapability("os_version", "10");desiredCaps.setCapability("browser", "chrome");desiredCaps.setCapability("resolution", "1280x800");

如果创建一个 WebDriver 实例并将 DesiredCapabilities 设置为:

WebDriver driver = new ChromeDriver(desiredCaps);

您将看到这个通知: “不推荐使用 ChromeDriver 构造函数(性能)”。您可以使用 ChromeOptions 和 merge ()方法来处理这个问题,如下所示:

ChromeOptions options= new ChromeOptions();// I added an argument as exampleoptions.addArguments("--start-maximized");options.merge(desiredCap);WebDriver driver = new ChromeDriver(options);5?? The DifferentDefault Browser Language Problem5. 不同的默认浏览器语言问题


同样,WebDriver 测试在不同环境中遇到的问题之一是不同的默认浏览器语言。例如,您根据默认语言为英语的浏览器设置测试。但是,其他人希望在默认语言为德语的浏览器中运行这些测试。

如果 AUT 是一个在多个国家使用的应用程序,并且根据语言的不同而有所不同,那么您的测试肯定会有问题。为了避免这个问题,您可以独立于环境使用 Selenium WebDriver 更改浏览器的默认语言。以下是解决方案:

ChromeOptions options = new ChromeOptions();options.addArguments("-lang= en");WebDriver driver = new ChromeDriver(options);

你可以在这里找到 ISO 语言代码。在上面的设置之后,你可以检查你的浏览器当前的默认语言如下:

JavascriptExecutor executor = (JavascriptExecutor) driver; String actualLanguage = executor.executeScript("return window.navigator.userlanguage || window.navigator.language").toString();
总结

在本文中,我们研究了 UI 测试过程中可能遇到的5个重要问题及其解决方案。每天都在开发和更改的软件应用程序无疑会给我们带来全新的测试问题。我相信这种情况会让所有的测试自动化工程师感到兴奋,因为每一个新的问题都意味着一个新的旅程。不要害怕踏上这些旅程,即使最终没有解决方案

本人抖音账号:里面有最新最流行的automation devops等技术的介绍,欢迎大家一建三连。

电脑