selenium网页加载慢(selenium 等待网页加载完毕)

今天给各位分享selenium网页加载慢的知识,其中也会对selenium 等待网页加载完毕进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

如何设置selenium打开网页超过30秒就重新刷新下?

如果一个网页实际打开超过30秒,说明这是一个失败的网站。

“超时时间为30秒,但依然程序没反应”另一种可能是你程序写的有问题。

先手动刷新看看是否30秒能加载完成,如果还是没有完成。那就是网页的问题。如果手动刷新,能在30秒内加载完成,那就是你的程序写的有问题喽。

selenium爬虫要求更换网络环境

网速太慢。在安装完selenium后,爬虫需要创建一个浏览器环境,这个阶段需要网速很快的情况下才能完成,网速太慢爬虫无法创建浏览器环境,就会显示要求更换网络环境,更换网速快的网络即可解决。

selenium 脚本驱动chrome浏览器很慢

我当时遇到的问题是chromedrive.exe版本过低和chrome浏览器兼容性不好,可以试一下高版本的chromedrive.exe试一下,仅供产考

selenium webdriver 执行测试常见问题

selenium中如何保证操作元素的成功率?

如何提高selenium脚本的执行速度?

用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?

你的自动化用例的执行策略是什么?

(1)selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?

答:Selenium保证元素成功率是通过元素的定位,当然它的定位方法很多,一定能有合适的。但是在自动化工程的实施过程中,高质量的自动化测试不是只有测试人员保证的。需要开发人员规范开发习惯,如给页面元素加上唯一的name,id等,这样就能大大地提高元素定位的准确性。当然如果开发人员开发不规范,我们在定位元素的时候尽量使用相对地址定位,这样能减少元素定位受页面变化的影响。只要我们元素定位准确,就能保证我的每一个操作符合我的预期。

(2)如何提高selenium脚本的执行速度?

答:Selenium脚本的执行速度受多方面因素的影响,如网速,操作步骤的繁琐程度,页面加载的速度,以及我们在脚本中设置的等待时间,运行脚本的线程数等。所以不能单方面追求运行速度的,要确保稳定性,能稳定地实现回归测试才是关键。

我们可以从以下几个方面来提高速度:

一,减少操作步骤,如经过三四步才能打开我们要测试的页面的话,我们就可以直接通过网址来打开,减少不必要的操作。

二,中断页面加载,如果页面加载的内容过多,我们可以查看一下加载慢的原因,如果加载的内容不影响我们测试,就设置超时时间,中断页面加载。

三,在设置等待时间的时候,可以sleep固定的时间,也可以检测某个元素出现后中断等待也可以提高速度。

四,配置testNG实现多线程。在编写测试用例的时候,一定要实现松耦合,然后在服务器允许的情况下,尽量设置多线程运行,提高执行速度。

(3)用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?

答:此时我们要分析出不稳定的原因,然后有针对性的去解决问题。主要有以下几个方面 :

一,网速问题:有的时候网页加载的比较慢,在程序执行的时候要操作的元素没有显示出来。这种情况比较常见,运行一次网速好的时候通过了,再运行一次,页面没有打开,就不通过了。为了提高稳定性,我们只能牺牲运行时间了,在经常检测失败的元素前加上等待时间,等要操作的元素出现之后再执行下面的操作。

二,Selelnium的原因:Selenium1.0和2.0还是有区别的,有些儿函数在2.0下运行确实有时而有效,时面无效。如果mouseover()函数,就是这种情况, 我们需要避免使用这类的函数。

三,多线程的时候,测试用例间相互影响。虽然多线程的时候运行速度比较快,但是如果用例之间的耦合性没有设计好,也会影响的,如果用例A先于用例B执行的时候,就会影响到用例B;反之则没有问题。这种情况,如果你的自动化测试工程打算多线程的时候,提前就要把测试用例测试的耦合度比较松,尽量没有任何关系,因为多线程的执行顺序是不受控制的。

(4)你的自动化用例的执行策略是什么?

答:自动化测试用例的执行策略是要看自动化测试的目的,通常有如下几种策略:

一,自动化测试用例是用来监控的,在此目的下,我们就把自动化测试用例设置成定时执行的,如果每五分钟或是一个小时执行一次,在jenkins上创建一个定时任务即可。

二,必须回归的用例。有些儿测试用例,如BVT测试用例,我们在公司产品任何变动上线之前都需要回归执行。那我们就把测试用例设置成触发式执行,在jenkins上将我们的自动化测试任务绑定到开发的build任务上。当开发人员在仿真环境上部代码的时候,我们的自动化测试用例就会被触发执行。

三,不需要经常执行的测试用例。像全量测试用例,我们没有必要一直回归执行,必竟还是有时间消耗的,有些非主要业务线也不需要时时回归。这类测试用例我们就采用人工执行,在jenkins创建一个任务,需要执行的时候人工去构建即可。

python scrapy 利用selenium模拟登录每个采集一个url都要打开浏览器,速度很慢,如何解决?

零. 在用scrapy爬取数据中,有写是通过js返回的数据,如果我们每个都要获取,那就会相当麻烦,而且查看源码也看不到数据的,所以能不能像浏览器一样去操作他呢?

所以有了-

Selenium 测试直接在浏览器中运行,就像真实用户所做的一样。Selenium 测试可以在 Windows、Linux 和 Macintosh上的 Internet Explorer、Chrome和 Firefox 中运行。其他测试工具都不能覆盖如此多的平台。使用 Selenium 和在浏览器中运行测试还有很多其他好处。

UI自动化测试中,Selenium的三种等待方式详解

  背景

UI自动化过程中,必然会遇到加载问题、环境不稳定、网络慢的情况,如果不做任何处理就会因为没有找到元素而报错。

另外一种情况就是页面使用了ajax异步加载机制(现在都是resetful,客户端和服务端都是分离的),不知道页面是什么时候到达的。这时我们就要用到wait,而在 Selenium 中,我们一共有三种等待,分别是固定等待、隐式等待和显式等待。

time.sleep

固定等待,本质:让当前的线程睡眠,实质是线程的阻塞(blocking),用wait 方式实现。

缺点:网络条件好浪费时间,严重影响项目的性能。

好处:调试脚本可以用。

implicitly_wait

隐式等待,本质:在脚本的开始设置一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则可能抛出异常。隐式等待对整个driver周期都起作用,在最开始设置一次就可以了,不要当作固定等待使用。

缺点:JavaScript一般都是放在我们的body的最后进行加载,实际这时页面的元素都已经加载完毕,我们却还在等待全部页面加载结束。

WebDriverWait

显式等待,本质:动态的等待,判断某一个元素是不是已经出现了,比如title是不是叫 百度 或百度搜索,根据动态的一些条件来轮询,它会不停的轮询去给我们检测,条件是成功还是失败,比如0.5s就检测一次这个元素在这个条件下是成功还是失败。同时设置轮询的超时时间。

如果同时设置了显式等待和隐式等待,就看谁设置的等待时间长,谁的超时等待时间长,就用谁的执行。

显式等待

模块

from selenium.webdriver.support.wait import WebDriverWait

WebDriverWait 的源码

# Licensed to the Software Freedom Conservancy (SFC) under one

# or more contributor license agreements. See the NOTICE file

# distributed with this work for additional information

# regarding copyright ownership. The SFC licenses this file

# to you under the Apache License, Version 2.0 (the

# "License"); you may not use this file except in compliance

# with the License. You may obtain a copy of the License at

#

#

#

# Unless required by applicable law or agreed to in writing,

# software distributed under the License is distributed on an

# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

# KIND, either express or implied. See the License for the

# specific language governing permissions and limitations

# under the License.

import time

from selenium.common.exceptions import NoSuchElementException

from selenium.common.exceptions import TimeoutException

POLL_FREQUENCY = 0.5 # How long to sleep inbetween calls to the method

IGNORED_EXCEPTIONS = (NoSuchElementException,) # exceptions ignored during calls to the method

class WebDriverWait(object):

def __init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None):

"""Constructor, takes a WebDriver instance and timeout in seconds.

:Args:

- driver - Instance of WebDriver (Ie, Firefox, Chrome or Remote)

- timeout - Number of seconds before timing out

- poll_frequency - sleep interval between calls

By default, it is 0.5 second.

- ignored_exceptions - iterable structure of exception classes ignored during calls.

By default, it contains NoSuchElementException only.

Example:

from selenium.webdriver.support.ui import WebDriverWait

element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id("someId"))

is_disappeared = WebDriverWait(driver, 30, 1, (ElementNotVisibleException)).

until_not(lambda x: x.find_element_by_id("someId").is_displayed())

"""

self._driver = driver

self._timeout = timeout

self._poll = poll_frequency

# avoid the pide by zero

if self._poll == 0:

self._poll = POLL_FREQUENCY

exceptions = list(IGNORED_EXCEPTIONS)

if ignored_exceptions is not None:

try:

exceptions.extend(iter(ignored_exceptions))

except TypeError: # ignored_exceptions is not iterable

exceptions.append(ignored_exceptions)

self._ignored_exceptions = tuple(exceptions)

def __repr__(self):

return ''.format(

type(self), self._driver.session_id)

def until(self, method, message=''):

"""Calls the method provided with the driver as an argument until the

return value is not False."""

screen = None

stacktrace = None

end_time = time.time() + self._timeout

while True:

try:

value = method(self._driver)

if value:

return value

except self._ignored_exceptions as exc:

screen = getattr(exc, 'screen', None)

stacktrace = getattr(exc, 'stacktrace', None)

time.sleep(self._poll)

if time.time() end_time:

break

raise TimeoutException(message, screen, stacktrace)

def until_not(self, method, message=''):

"""Calls the method provided with the driver as an argument until the

return value is False."""

end_time = time.time() + self._timeout

while True:

try:

value = method(self._driver)

if not value:

return value

except self._ignored_exceptions:

return True

time.sleep(self._poll)

if time.time() end_time:

break

raise TimeoutException(message)

参数:

三种等待方式的实例

from selenium import webdriver

from time import sleep

from selenium.webdriver.support.wait import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

# 三种等待方法

class TestCase(object):

def __init__(self):

self.driver = webdriver.Chrome()

self.driver.get('')

sleep(2)

def test_sleep(self):

self.driver.find_element_by_id('kw').send_keys("selenium")

sleep(2) # 线程的阻塞 blocking wait 方式实现

self.driver.find_element_by_id('su').click()

sleep(3)

self.driver.quit()

def time_implicitly(self):

self.driver.implicitly_wait(10)

self.driver.find_element_by_id('kw').send_keys("webdriver")

self.driver.find_element_by_id('su').click()

# sleep(2)

self.driver.quit()

def time_wait(self):

wait = WebDriverWait(self.driver,2,0.5)

wait.until(EC.title_is('百度一下,你就知道'))

self.driver.find_element_by_id('kw').send_keys("webdriver")

self.driver.find_element_by_id('su').click()

sleep(2)

self.driver.quit()

if __name__=="__main__":

case = TestCase()

# case.test_sleep()

# case.time_implicitly()

case.time_wait()

selenium网页加载慢的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于selenium 等待网页加载完毕、selenium网页加载慢的信息别忘了在本站进行查找喔。

1、本网站名称:源码村资源网
2、本站永久网址:https://www.yuanmacun.com
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
源码村资源网 » selenium网页加载慢(selenium 等待网页加载完毕)

1 评论

您需要 登录账户 后才能发表评论

发表评论

欢迎 访客 发表评论