如何在Selenium Python中获取当前URL

520 阅读12分钟

{ "@context":"schema.org", "@type":"FAQPage", "mainEntity":{ "@类型":"问题", "名称":"我如何在Selenium中找到URL?", "acceptedAnswer":{ "@type":"答案", "文本":"在Selenium中检查链接是针对有破损超链接的网页的一种有效方法。检查链接的过程将帮助你在机器人遇到破损链接时发现问题。在网页上,超链接是用HTML锚()标签实现的。脚本需要做的就是定位网页上的每一个锚点标签,获得相应的URL,并检查其中是否有断裂。" } } }

{ "@context":"schema.org/", "@type":"BreadcrumbList", "itemListElement":[{ "@type":"ListItem", "position":1, "名称":"首页", "项目":"www.lambdatest.com/" },{ "@type":"ListItem", "position":2, "name":"博客", "项目":"www.lambdatest.com/blog/" },{ "@type":"ListItem", "position":3, "name":"How To Get Current URL In Selenium Python", "item":"www.lambdatest.com/blog/how-to…" }] }

如果你使用Selenium WebDriver,你可能知道有很多方法可以执行特定的动作或与网页上的元素互动。Selenium Python模块为你提供了你所需要的方法,使你在在线使用网页浏览器时能够自动完成许多任务。

作为一个测试人员,你可能需要知道由你的Selenium控制的Web浏览器所显示的页面的URL。这对于跟踪你从中提取某些数据的URL很有用,这样你就可以在自动化测试脚本中更新这些数据。 你也可能需要知道当前的URL,同时做出断言来检查页面标题中的一个关键词。

在进行Python自动化测试时,你可以很容易地得到一个网页的当前URL--要做到这一点,你只需要访问Selenium WebDriver对象的current_url方法。

在这个Selenium Python教程中,我将向你展示如何使用Pytest在Selenium Python中获取当前URL。如果你是Pytest的新手,你可以通过这个Selenium Pytest教程来了解Pytest的入门。

让我们开始吧。

目录

什么是Pytest?

Pytest是最流行的Python测试自动化框架之一(主要用于单元测试)。它是一个高度可配置和可扩展的测试框架,带有丰富的功能,可以帮助您在Python中编写更好的测试代码。

Pytest被描述为一个可扩展的框架,与其他测试框架相比,它的模板代码更少。Pytest夹具通过在测试案例中传递参数名称为测试提供上下文;其参数化消除了测试多组输入和输出的重复代码,其重写的断言语句为失败原因提供了详细的输出。

如何使用Pytest在Selenium中设置测试环境?

在本文关于如何在Selenium Python中获取当前URL的部分,我们将学习如何设置测试环境。

安装Pipenv

在我们开始之前,我们将建立一个测试环境。为此,请按照下面的步骤进行。

  1. 我们将安装Pipenv以更好地管理我们的依赖关系。Pipenv是一个Python项目的依赖管理器。如果你熟悉Node.js的npm或Ruby的bundler,它在精神上与这些工具相似。

    以下命令是在macOS上安装pipenv。在pipenv的官方网站上,你可以看到如何在其他操作系统上安装它。

brew install pipenv
  1. 安装完成后,输入该命令。
pipenv

结果应该是这样的。

pipenv

还有其他几个替代Pipenv的软件包管理方法,也可以使用,如pyenv、poetry、virtualenv、autoenv等。然而,添加它们已经超出了本博客的范围。

  1. 在一个空目录下创建Pipfile 。这个文件对于使用Pipenv是必不可少的。如果你需要重新安装,它可以用来跟踪你的项目的依赖性。

Github

python_version参数是你在创建新的pipenv环境时指定的基础解释器的版本。

包裹部分是你可以列出你的项目所需的软件包的地方。

**"*"**是用来安装最新稳定版本的软件包。在写这篇关于如何在Selenium Python中获取当前URL的博客时,Pytest和Selenium的最新版本分别是Pytest 7.1.2和4.2.2。

  1. 在你的终端,进入目录,用命令安装最新稳定版本的Pytest和Selenium软件包。
pipenv install

pipenv install

  1. 为你要使用的浏览器下载最新的WebDriver。WebDriver是一个远程控制接口,可以对用户代理进行反省和控制。它为进程外程序提供了一个平台和语言中立的电线协议,以远程指示网络浏览器的行为。
WebDriver电线协议(又称 "WebDriver协议")是一个开放标准,允许软件与浏览器互动,就像人与浏览器互动一样。  
以下是最常用浏览器的下载链接。

*   火狐。[GeckoDriver](https://github.com/mozilla/geckodriver/releases)
*   浏览器:Chrome。[ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/downloads)
*   Opera:OperaDriver。[OperaDriver](https://github.com/operasoftware/operachromiumdriver/releases)
*   Edge:[Microsoft Edge WebDriver](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/#downloads)

请确保你的浏览器有正确的版本,否则将无法工作。然而,你不需要WebDriver,如果你在[云Selenium Grid](https://www.lambdatest.com/selenium-automation)上运行你的测试。

云中的Selenium测试配置由基于云的Selenium网格管理,如LambdaTest,它将帮助你为你的Web应用程序运行Selenium测试,以确保[跨浏览器的兼容性](https://www.lambdatest.com/learning-hub/cross-browser-compatibility)。

基于云的[跨浏览器测试](https://www.lambdatest.com)平台,如LambdaTest,允许你在一个超过3000种浏览器和操作系统的[在线浏览器农场](https://www.lambdatest.com/online-browser-farm)上进行[自动化测试](https://www.lambdatest.com/automation-testing)。

现在,让我们添加一些代码来演示如何在Selenium Python中从我们的Selenium控制的浏览器中获得当前URL。

如何使用Pytest在Selenium Python中获得当前的URL?

现在我们的项目已经准备好了,是时候添加我们的第一个测试场景了。在这里,我已经创建了

  • "test_ecommerce_playground.py" 用于场景1
  • "test_selenium_playground.py"用于场景2。

这就是我们项目的结构应该是这样的。

test_ecommerce_playground.py

在Python项目中,传统的做法是在项目根目录下创建一个 "测试"目录,以存放所有的测试案例。在这个模块中,我们只是为我们的测试用例添加函数。

tests

我们将为两个页面编写页面对象存根,然后用它们来编写我们的测试用例函数。在我们的项目中,我已经在这里创建了一个名为pages的目录。

pages

注意这个目录是在测试 目录之外的。

  • 我们需要它在外面,因为我们希望这个pages目录是一个 Python 包。
  • Python 包是由**__init__.py**文件表示的 (发音为 "dunder init")。它只是一个在目录中的空文件,它说:"嘿,这是一个 Python 包,你可以这样对待它,特别是对于导入语句。"

init.py

让我们给我们的项目添加一个config.json文件。它应该位于我们项目的根部。config.json是我们的配置文件。它允许我们定义一些将被应用于我们项目的设置或偏好参数。

它包含一个浏览器,我将其设置为 "Firefox",以及一个隐式超时。我们为所有的交互硬编码了一个10秒的隐式超时。我们的测试读取这个配置文件的最好方法是使用一个pytest夹具。你将在后面的conftest.py文件中看到这一点

情景1:

第1步:导航到'https://ecommerce-playground.lambdatest.io/'
第2步:用关键词 "iPhone "进行搜索。
第3步:在控制台显示页面的当前URL。
第4步:检查搜索关键词是否在页面的当前URL中。
第5步:将页面的当前URL保存在urls.txt文件中。

让我们看一下代码。

执行

ecommerce_playground.py

代码演练。

from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

selenium.webdriver模块提供所有的WebDriver实现。目前支持的WebDriver实现是Firefox、Chrome、Microsoft Edge、IE和Remote。

  • By类用于定位文档中的元素。
  • Keys类提供了一些方法,通过这些方法你可以访问RETURN, F1, ALT, ENTER等键。请阅读我们之前关于在Selenium中处理键盘动作的博客以了解更多信息。

test_ecommerce_playground.py

执行输出。

下面显示的是页面的URL。

Execution Output:

urls.txt内容如下。

Search - iPhone : https://ecommerce-playground.lambdatest.io/index.php?route=product%2Fsearch&search=iPhone

情景2:

步骤1:导航到'https://www.lambdatest.com/selenium-playground/'。
步骤2:点击Simple Form Demo。
步骤3:在控制台显示页面的当前URL。
步骤4:将页面的当前URL保存到urls.txt文件。

实施。

文件名 - selenium_playground.py

test_selenium_playground.py

代码演练。

自动化使用定位器来寻找页面上的元素。Selenium定位器是用于寻找元素的简单查询字符串。它们将返回所有符合其查询的元素。

Selenium WebDriver支持多种类型的定位器--ID、名称、类名称、CSS选择器、XPath、链接文本、部分链接文本和标签名称。

现在让我们来看看如何为我们的测试场景所需的目标项目获取定位器。

test scenario

在这里,我使用检查元素将简单表单演示链接的XPath存储在一个名为simple_form_demo的变量中。

simple_form_demo = (By.XPATH, "//a[normalize-space()='Simple Form Demo']")

我们将使用 "find_element",它是由WebDriver实例直接调用的,我们在代码中把它命名为浏览器

simple_form = self.browser.find_element(*self.simple_form_demo)

为了定位Simple Form Demo元素,我们需要说browser.find_element,然后传入我们的simple_form_demo定位器。

现在你可能想知道这个星号是什么?好吧,Selenium的find_element方法需要两个参数--定位器类型和查询--但simple_form_demo是一个元组。

通过在这里添加这个,我可以把我的元组,我的定位器,传递给find_element方法。如果它成功了,它将返回一个代表页面上simple_form元素的对象。

simple_form.click()

现在,我们将使用由find_element方法返回的元素对象的调用。**click()**允许你点击一个元素。一旦我有了这个元素,我就可以点击它,进入它重定向的页面。

# Get the current url of the page in a variable
   get_url = browser.current_url

current_url返回浏览器中当前加载的页面的URL。我们使用这个WebDriver调用将页面的当前URL存储在一个叫做get_url的变量中。

# Save the url in a urls.txt file
   with open('urls.txt', 'a') as f:
       f.write(title + " : "+ get_url)
       f.write('\n')

然后我们把这个变量的内容保存在urls.txt文件中。

执行输出

Execution Output

点击Simple Form Demo后,你会被重定向到这个页面。

Simple Form Demo

urls.txt的内容。

Selenium Grid Online | Run Selenium Test On Cloud :
https://www.lambdatest.com/selenium-playground/simple-form-demo

用Python在3000多个浏览器和操作系统上运行你的Selenium测试。现在就试试LambdaTest吧!

如何在云网格上的Selenium Python中获得当前的URL?

云Selenium网格为我们提供了一种选择,可以在一系列的虚拟浏览器、浏览器版本和操作系统上通过云安全地运行测试。LambdaTest就是这样一个平台,它提供了一个安全、可扩展和超级可靠的基于云的Selenium Grid基础设施,让你可以大规模地运行测试。

LambdaTest是一个基于云的跨浏览器测试平台,它允许你在一个由3000多个运行在真实操作系统上的移动、桌面和平板电脑的真实设备组成的在线设备场上运行测试。LambdaTest Selenium Grid还允许你进行并行测试

您还可以订阅LambdaTest YouTube频道,了解围绕Selenium测试Cypress E2E测试、CI/CD等的最新教程。

要使用LambdaTest Selenium Grid与Pytest来执行Python网络自动化,你需要一个LambdaTest账户。以下是您可以遵循的步骤。

  1. 导航到LambdaTest网站,如果您已经有一个账户,请登录;如果您还没有账户,请创建一个。

LambdaTest website

  1. 登录后,点击屏幕左侧侧边栏的自动化,导航到自动化页面。

Automation

  1. 要在LambdaTest网格中使用Pytest,您需要LambdaTest凭证(即用户名和访问密钥)。要获得凭证,请点击屏幕右侧的 "访问密钥"按钮。

Access Key

  1. 现在让我们把凭证(用户名和访问密钥)保存到环境变量LT_USERNAME和LT_ACCESS_KEY中。

我们将创建一个.env文件,在其中保存我们的凭证。

nano .env

然后粘贴

LT_USERNAME=YOUR_USERNAME
LT_ACCESS_KEY=YOUR_ACCESS_KEY

一旦你保存了这些变化,一个.env文件应该出现在你的项目中。

env file

实施。

你现在必须按以下方式更新你的conftest.py文件。

Github

你可以使用LambdaTest的Selenium Desired Capabilities Generator来自动生成在LambdaTest的Selenium网格上运行你的Selenium自动化测试脚本所需的能力类。Selenium Capabilities Generator将根据你在用户界面上的鼠标交互,为你提供完整的能力类代码。

在我们的项目中,我们使用Selenium 4,所以这就是期望的Selenium能力类的声明的样子。

desired_caps = {}
   browser = {
       'LT:Options' : {
         "user" : environ.get('LT_USERNAME', None),
         "accessKey" : environ.get('LT_ACCESS_KEY', None),
         "build" : "lamdatest_build",
         "name" : "lamdatest_demo",
         "platformName" : "Windows 11",
       },
       "browserName" : "Firefox",
       "browserVersion" : "99.0",
   }
   desired_caps.update(browser)

由于我们在环境文件中保存了我们的证书,我们做了这个导入,以便能够在我们的conftest.py文件中使用它们。

from os import environ

一旦测试成功运行,请登录LambdaTest自动化仪表板,检查测试执行的状态。

LambdaTest Automation Dashboard

LambdaTest Automation Dashboard

如果你想在Selenium Python测试中发展先进的、可操作的专业知识,并使你的职业生涯更上一层楼,你可以参加LambdaTest的Selenium Python 101认证。

selenium-python-101

下面是LambdaTest的Selenium Python 101认证的一个简短介绍。

结论

在这个Selenium Python教程中,我们看到了如何使用Pytest框架在Selenium Python中获取当前URL。我们从使用Pytest在Selenium中设置测试环境开始,并学习了在Selenium中使用Python获得当前URL的核心方法。这通常是在你需要一个重定向链的中间URL或需要在不同的URL中做一系列的导航的情况下使用。最后,我们看到代码在云Selenium网格上的执行,如LambdaTest。

我希望你喜欢阅读这篇关于如何在Selenium Python中获取当前URL的文章。

常见问题 (FAQ)

我如何在Selenium中找到URL?

在Selenium中检查链接是针对有破损超链接的网页的一种有效方法。检查链接的过程将帮助你在机器人遇到破损链接时发现问题。在网页上,超链接是用HTML锚()标签实现的。脚本需要做的就是定位网页上的每一个锚点标签,获得相应的URL,并检查其中是否有断裂。