前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Selenium Python使用技巧(三)

Selenium Python使用技巧(三)

作者头像
FunTester
发布2020-02-17 16:17:08
1.7K0
发布2020-02-17 16:17:08
举报
文章被收录于专栏:FunTesterFunTester

书接上文和上上文:

处理不同情况的等待

在Selenium自动化测试中网页可能需要花费一些时间来加载,或者希望在触发测试代码之前可以看到页面上的特定Web元素。在这种情况下,需要执行“显式等待”,这是一段代码,通过它可以定义要发生的条件,然后再继续执行代码。

Selenium具有WebDriverWait,可以将其应用于任何具有条件和持续时间的Web元素。如果不存在执行等待的元素或发生超时,则可能引发异常。

在下面的示例中,我们等待link_text=Sitemap加载到页面上,并在WebDriverWait方法中指定了超时。如果在超时时间内未加载该元素,则抛出异常。

代码语言:javascript
复制
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
from pip._vendor.distlib import resources
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
driver.get("https://www.***.com/")
timeout = 10

try:
    element_present = EC.presence_of_element_located((By.LINK_TEXT, 'Sitemap'))
    WebDriverWait(driver, timeout).until(element_present)
except TimeoutException:
    print("查找用户超时!")
driver.quit()

网页中的滚动操作

在使用Selenium执行测试自动化时,您可能需要在页面上执行上滚/下滚操作的要求。您可以将execute_script()window.scrollTo(JS)代码用作参数来实现相同的效果。在下面的示例中,加载被测网站后,我们滚动到页面的末尾。

代码语言:javascript
复制
from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get("https://www.***.com/")
timeout = 10

''' 滚动到页尾'''
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

sleep(10)

''' 滚动到页首'''
driver.execute_script("window.scroll(0, 0);")

sleep(10)
driver.quit()

使用Selenium放大和缩小

为了在进行Selenium自动化测试时放大或缩小,应使用transformCSS属性(适用于相应的浏览器),该属性可让您在页面上执行放大,缩小,旋转,倾斜等操作。不同类型的浏览器的CSS参数如下

在下面的示例中,我们将浏览器中加载的网页缩小200%,然后再放大100%(即恢复正常)。由于我们使用的是Firefox浏览器,因此我们使用了MozTransform CSS属性。

代码语言:javascript
复制
from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get("https://www.***.com/")
timeout = 10

''' 放大 200% '''
driver.execute_script('document.body.style.MozTransform = "scale(2.0)";')
driver.execute_script('document.body.style.MozTransformOrigin = "0 0";')

sleep(10)

''' 恢复 100% '''

driver.execute_script('document.body.style.MozTransform = "scale(1.0)";')
driver.execute_script('document.body.style.MozTransformOrigin = "0 0";')

sleep(10)

driver.quit()

查找元素的大小

必须首先通过ID搜索元素,然后使用.size属性来计算搜索到的元素的大小。在下面的示例中,我们在页面中计算按钮create_programmatic_menu(ID = createDestoryButton)的大小。

代码语言:javascript
复制
from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get("http://demos.***/test_Menu.html")
timeout = 10

search_element = driver.find_element_by_id("createDestroyButton")

print(search_element.size)

driver.quit()

获取元素的X和Y坐标

您必须遵循用于计算元素大小的类似方法。您必须首先通过ID搜索元素,然后使用.location属性来计算搜索到的元素的X和Y坐标。计算按钮create_programmatic_menu(ID = createDestoryButton)的X和Y坐标。

代码语言:javascript
复制
from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get("http://demos.***/test_Menu.html")
timeout = 10

search_element = driver.find_element_by_id("createDestroyButton")

print(search_element.location)

''' Release all the resources '''
driver.quit()

使用自定义配置文件禁用JavaScript

如果要禁用浏览器的JavaScript支持以验证自动跨浏览器与Selenium自动化测试的兼容性,则需要更改被测浏览器的配置文件设置(在本例中为Firefox),并将更改应用于配置文件。我们使用DEFAULT_PREFERENCES ['frozen'] ['javascript.enabled'] = False禁用浏览器的JavaScript支持。

执行代码后,您应该通过在地址栏中输入about:config并搜索javascript.enabled属性的值来验证配置文件的更改。

代码语言:javascript
复制
from selenium import webdriver

ff_profile = webdriver.FirefoxProfile()

ff_profile.DEFAULT_PREFERENCES['frozen']['javascript.enabled'] = False
ff_profile.set_preference("app.update.auto", False)
ff_profile.set_preference("app.update.enabled", False)

''' 更新配置 '''
ff_profile.update_preferences()

''' 加载配置文件 '''
driver = webdriver.Firefox(ff_profile)

''' 验证是否生效 '''
driver.get("about:config")

设置手动代理设置

在某些情况下,您可能需要更改代理设置才能执行测试。要更改代理设置,需要首先导入模块selenium.webdriver.common.proxy。您必须将代理类型设置为MANUAL,然后更改代理设置,然后将新设置应用到被测浏览器(在我们的示例中为Firefox)。需要用计划用于测试的IP地址和端口号替换ip_addressport_number

代码语言:javascript
复制
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType

proxy_settings = Proxy()

''' 修改配置 '''
proxy_settings.proxy_type = ProxyType.MANUAL

proxy_settings.http_proxy = "ip_address:port_number"
proxy_settings.socks_proxy = "ip_address:port_number"
proxy_settings.ssl_proxy = "ip_address:port_number"

''' 添加证书 '''
capabilities = webdriver.DesiredCapabilities.FIREFOX
proxy_settings.add_to_capabilities(capabilities)

driver = webdriver.Firefox(desired_capabilities=capabilities)

  • 郑重声明:文章首发于公众号“FunTester”,禁止第三方(腾讯云除外)转载、发表。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 处理不同情况的等待
  • 网页中的滚动操作
  • 使用Selenium放大和缩小
  • 查找元素的大小
  • 获取元素的X和Y坐标
  • 使用自定义配置文件禁用JavaScript
  • 设置手动代理设置
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档