📜  在Python和 BrowserStack 中使用Selenium实现基于云的自动化

📅  最后修改于: 2022-05-13 01:55:00.034000             🧑  作者: Mango

在Python和 BrowserStack 中使用Selenium实现基于云的自动化

Selenium是一个支持 Web 浏览器自动化的库。它最常用于测试 Web 应用程序。 Selenium 的核心是Selenium SeleniumWebDriver使用浏览器自动化 API 来控制浏览器并运行测试。这意味着浏览器将以与真实用户使用时相同的方式工作。您可以使用这些功能将大部分无聊的在线工作自动化,例如,申请LinkedInAngelList上的多个工作。

这篇文章是关于使用Selenium (Python) 来自动化一个表单填写过程,即多次填写一个表单。在那之后,我们通过使用BrowserStack将这个自动化过程带到云端,使事情更上一层楼。 BrowserStack是一个云网络和移动测试平台,让开发人员可以根据测试需求按需访问浏览器。

基于云的自动化和测试有几个好处。它提供了更好的协作、更快和更具成本效益的测试、无限的可用性以及一些主要优势,如定制、并行化和对敏捷工作流的支持。

在本文中,我们将使用一个示例 Google 表单。

第一步也是最明显的一步是在您的终端中使用以下命令在您的系统上安装Selenium :

sudo pip3 install selenium

下一步是创建一个 BrowserStack 帐户(如果您已经有一个,那就太好了)。 BrowserStack 的 1 个并行和 1 个用户 1 年的自动化移动计划通过 Github Student Developer Pack 对学生免费。

然后,您需要前往 BrowserStack 网站上的此页面。您可以在此处选择您喜欢的浏览器和操作系统组合。选择您的偏好后,您需要在代码编辑器中在系统上创建一个新的 .py 文件。假设您希望在 Mac OS X Catalina 上的 Chrome 84 浏览器上执行我的测试。因此,您应该在 .py 文件中写下以下代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time
  
desired_cap = {
 'browser': 'Chrome',
 'browser_version': '84.0 beta',
 'os': 'OS X',
 'os_version': 'Catalina',
 'resolution': '1024x768',
 'name': 'Bstack-[Python] Sample Test'
}
  
driver = webdriver.Remote(
    command_executor ='Your unique BrowserStack Access Key link',
    desired_capabilities = desired_cap)


代码的前四行指定了导入的库。稍后将在项目中使用时间库。所需的上限字典指定要使用的操作系统和浏览器的规格。下一条语句( webdriver.Remote() )将程序连接到 BrowserStack 的系统。当您选择浏览器和操作系统首选项时,将在此页面上找到要传递给command_executor参数的唯一字符串。访问密钥对于每个 BrowserStack 用户都是唯一的,链接也是如此。

在此之后,您需要将以下Python代码添加到您的 .py 文件中。

driver.get('https://forms.gle/zX5NEumdXW4Z7SrC6')

driver.get()语句将打开浏览器中提供的链接。下面附上表格的屏幕截图。

本文使用的示例表单。

现在您的下一步是为每个问题/字段选择正确的选项。有几种方法可以做到这一点,但假设您使用 XPath 来选择所需的选项。为此,您需要将鼠标悬停在您选择的选项上,然后在单选按钮/复选框上单击鼠标右键。然后你需要选择检查选项。当您右键单击右侧新窗格中突出显示的元素时,您将能够复制 XPath,如下图所示。

复制 XPath

这适用于多项选择、文本和复选框字段。现在,您可以将 XPath 以字符串的形式粘贴到 .py 文件中,如下所示。您还需要提交按钮的 XPath 和提交另一个响应(重新提交)按钮。重新提交按钮使自动化更容易。

radioOption3 ='//*[@id ="mG61Hd"]/div[2]/div / div[2]/div[1]/div / div / div[2]/div[1]/div / span / div / div[3]/label / div / div[1]/div / div[3]'
checkBox2 = '//*[@id ="mG61Hd"]/div[2]/div/div[2]/div[3]/div/div/div[2]/div[1]/div[2]/label/div/div[1]/div[2]'
checkBox3 = '//*[@id ="mG61Hd"]/div[2]/div/div[2]/div[3]/div/div/div[2]/div[1]/div[3]/label/div/div[1]/div[2]'
text = '//*[@id ="mG61Hd"]/div[2]/div/div[2]/div[2]/div/div/div[2]/div/div[1]/div/div[1]/input'
submit = '//*[@id ="mG61Hd"]/div[2]/div/div[3]/div[1]/div/div/span/span'
  
resubmit = '/html / body / div[1]/div[2]/div[1]/div / div[4]/a'

现在,您剩下最后一步,实现自动化循环。假设您要填写表格 100 次。所以你运行一个while循环100次,每次都增加变量i 。在while循环中,您使用find_element_by_xpathclick()属性来实现您的功能,对于文本字段, send_keys方法可以完成这项工作。 time.sleep(1)在提交表单后等待 1 秒以避免任何不必要的错误。以下代码使用tryexcept用于相同目的(作为预防措施)。如果没有错误,该工具将继续在同一窗口中提交另一个响应。如果产生错误,它将关闭该窗口,并从一个新窗口开始。最后的driver.quit()语句停止/完成自动化过程。

i = 0
while i<100:
    driver.find_element_by_xpath(radioOption3).click()
    driver.find_element_by_xpath(checkBox2).click()
    driver.find_element_by_xpath(checkBox3).click()
    text_box = driver.find_element_by_xpath(text)
    text_box.send_keys("The text I need")
    driver.find_element_by_xpath(submit).click()
    i = i + 1
    time.sleep(1)
    try:
        driver.find_element_by_xpath(resubmit).click()
    except:
        driver.close()
        driver = webdriver.Remote(command_executor ='Your unique BrowserStack link', desired_capabilities = desired_cap)
        driver.get('https://forms.gle / xX5NEumdXW4Z7SrC6')
driver.quit()

现在您需要做的就是转到您的终端并使用以下命令运行该程序。

python3 filename.py

现在您可以移动到 BrowserStack 仪表板并查看您的程序填写表单 100 次。

Selenium是一个强大的工具,可用于各种目的。该代码易于实现,它使测试和自动化变得更加容易。 BrowserStack 提供了一个易于使用的强大界面,使基于云的测试变得更加容易。