win10桌面图标异常,求助

win10桌面图标异常,求助,第1张

最近刚刚接触到RobotFramework,发现这个工具倒是可以满足我的要求,而且可以结合seleniumLibrary,用来做web的自动化测试相当不错。之前我也接触过selenium,不过感觉那个工具更贴近开发人员使用,有了robotFramework之后,感觉这个工具相当强大,而且是贴近测试人员的。之所以说强大,主要是这些测试脚本都可以用文本格式保存(如txt/html等)

==安装篇==

如果有想学的朋友可以自己下载以下文件安装(Google-code里可以找到大部分的安装文件):

这篇文章的内容比较旧了,最新的安装指南请查看 更新篇

python-271msi(首先要有python,请选择将Python加入Path)

wxPython28-win32-unicode-28110-py27exe(wxPython,必须要的)

robotframework-260win32exe(然后装robot的Framework)

robotframework-ride-0381win32exe(robotFramework的IDE,很不错)

robotframework-seleniumlibrary-28win32exe(seleniumLibrary)

安装成功后

执行[PythonDir]\Scripts\ridepy

看到界面就是安装成功了。

如果需要AutoIt支持就下载下面2个东东。

AutoItLibrary-11

pywin32-216win32-py27exe

==入门篇==

安装完成了,这个框架可以说是基于keyword的 *** 作,按F5可以看到所有加载的keyword。

首先新增一个project

然后新增suite

然后新增test case,接着在suite层级add library,把selenium library加进来,添加后按F5检验是否添加成功,如图

OK,继续在suite的setting里设置suite启动和结束的keyword,即Start Selenium Server和Stop Selenium Server,他会在运行时帮助我们自动启动seleniumserver。

接下来在test case里添加一个步骤,open browser(一般用selenium做web测试都要用这个方法来打开浏览器),添加后关键字变成蓝色表示找到关键字了,否则可能是拼写错误或者没有加载相应的library。红色表示有一个必选参数要给定输入值,具体参数可以看F5里的keyword说明。

输入参数,第二个参数默认是firefox,不过我没装,就用ie吧。

以上只是一个简单的例子,没有详细说明每个步骤的 *** 作,只是初步介绍。后续再详细介绍 收起

一、什么是Selenium

selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。

selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。

二、selenium基本使用

用python写爬虫的时候,主要用的是selenium的Webdriver,我们可以通过下面的方式先看看SeleniumWebdriver支持哪些浏览器

执行结果如下,从结果中我们也可以看出基本山支持了常见的所有浏览器:

这里要说一下比较重要的PhantomJS,PhantomJS是一个而基于WebKit的服务端JavaScript API,支持Web而不需要浏览器支持,其快速、原生支持各种Web标准:Dom处理,CSS选择器,JSON等等。PhantomJS可以用用于页面自动化、网络监测、网页截屏,以及无界面测试

声明浏览器对象

上面我们知道了selenium支持很多的浏览器,但是如果想要声明并调用浏览器则需要:

from selenium import webdriver

browser = webdriverChrome()

browser = webdriverFirefox()

这里只写了两个例子,当然了其他的支持的浏览器都可以通过这种方式调用

访问页面

from selenium import webdriver

browser = webdriverChrome()

browserget("httiducom")print(browserpage_source)

browserclose()

上述代码运行后,会自动打开Chrome浏览器,并登陆百度打印百度首页的源代码,然后关闭浏览器

查找元素

单个元素查找

from selenium import webdriver

browser = webdriverChrome()

browserget("baocom")

input_first = browserfind_element_by_id("q")

input_second = browserfind_element_by_css_selector("#q")

input_third = browserfind_element_by_xpath('//[@id="q"]')print(input_first)print(input_second)print(input_third)

browserclose()

这里我们通过三种不同的方式去获取响应的元素,第一种是通过id的方式,第二个中是CSS选择器,第三种是xpath选择器,结果都是相同的。

结果如下:

这里列举一下常用的查找元素方法:

find_element_by_name

find_element_by_id

find_element_by_xpath

find_element_by_link_text

find_element_by_partial_link_text

find_element_by_tag_name

find_element_by_class_name

find_element_by_css_selector

下面这种方式是比较通用的一种方式:这里需要记住By模块所以需要导入

from seleniumwebdrivercommonby import By

from selenium import webdriverfrom seleniumwebdrivercommonby import By

browser = webdriverChrome()

browserget("obaocom")

input_first = browserfind_element(ByID,"q")print(input_first)

browserclose()

当然这种方法和上述的方式是通用的,browserfind_element(ByID,"q")这里ByID中的ID可以替换为其他几个

多个元素查找

其实多个元素和单个元素的区别,举个例子:find_elements,单个元素是find_element,其他使用上没什么区别,通过其中的一个例子演示:

from selenium import webdriver

browser = webdriverChrome()

browserget("obaocom")

lis = browserfind_elements_by_css_selector('service-bd li')print(lis)

browserclose()

这样获得就是一个列表

当然上面的方式也是可以通过导入from seleniumwebdrivercommonby import By 这种方式实现

lis = browserfind_elements(ByCSS_SELECTOR,'service-bd li')

同样的在单个元素中查找的方法在多个元素查找中同样存在:

find_elements_by_name

find_elements_by_id

find_elements_by_xpath

find_elements_by_link_text

find_elements_by_partial_link_text

find_elements_by_tag_name

find_elements_by_class_name

find_elements_by_css_selector

元素交互 *** 作

对于获取的元素调用交互方法

from selenium import webdriverimport time

browser = webdriverChrome()

browserget("baocom")

input_str = browserfind_element_by_id('q')

input_strsend_keys("ipad")

timesleep(1)

input_strclear()

input_strsend_keys("MakBook pro")

button = browserfind_element_by_class_name('btn-search')

buttonclick()

运行的结果可以看出程序会自动打开Chrome浏览器并打开淘宝输入ipad,然后删除,重新输入MakBook pro,并点击搜索

交互动作

将动作附加到动作链中串行执行

from selenium import webdriverfrom seleniumwebdriver import ActionChains

browser = webdriverChrome()

url = "ry/tryphpfilename=jqueryui-api-droppable"browserget(url)

browserswitch_toframe('iframeResult')

source = browserfind_element_by_css_selector('#draggable')

target = browserfind_element_by_css_selector('#droppable')

actions = ActionChains(browser)

actionsdrag_and_drop(source, target)

actionsperform()

执行JavaScript

这是一个非常有用的方法,这里就可以直接调用js方法来实现一些 *** 作,

下面的例子是通过登录知乎然后通过js翻到页面底部,并d框提示

from selenium import webdriver

browser = webdriverChrome()

browserget("ucom/explore")

browserexecute_script('windowscrollTo(0, documentbodyscrollHeight)')

browserexecute_script('alert("To Bottom")')

获取元素属性

get_attribute('class')

from selenium import webdriver

browser = webdriverChrome()

url = 'hihucom/explore'browserget(url)

logo = browserfind_element_by_id('zh-top-link-logo')print(logo)print(logoget_attribute('class'))

获取文本值

text

from selenium import webdriver

browser = webdriverChrome()

url = 'com/explore'browserget(url)

input = browserfind_element_by_class_name('zu-top-add-question')print(inputtext)

获取ID,位置,标签名

id

location

tag_name

size

from selenium import webdriver

browser = webdriverChrome()

url = 'com/explore'browserget(url)

input = browserfind_element_by_class_name('zu-top-add-question')print(inputid)print(inputlocation)print(inputtag_name)print(inputsize)

Frame

在很多网页中都是有Frame标签,所以我们爬取数据的时候就涉及到切入到frame中以及切出来的问题,通过下面的例子演示

这里常用的是switch_tofrom()和switch_toparent_frame()

import timefrom selenium import webdriverfrom seleniumcommonexceptions import NoSuchElementException

browser = webdriverChrome()

url = 'oobcom/try/tryphpfilename=jqueryui-api-droppable'browserget(url)

browserswitch_toframe('iframeResult')

source = browserfind_element_by_css_selector('#draggable')print(source)try:

logo = browserfind_element_by_class_name('logo')except NoSuchElementException:    print('NO LOGO')

browserswitch_toparent_frame()

logo = browserfind_element_by_class_name('logo')print(logo)print(logotext)

等待

当使用了隐式等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常, 换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0

隐式等待

到了一定的时间发现元素还没有加载,则继续等待我们指定的时间,如果超过了我们指定的时间还没有加载就会抛出异常,如果没有需要等待的时候就已经加载完毕就会立即执行

from selenium import webdriver

browser = webdriverChrome()

browserimplicitly_wait(10)

browserget('com/explore')

input = browserfind_element_by_class_name('zu-top-add-question')print(input)

显示等待

指定一个等待条件,并且指定一个最长等待时间,会在这个时间内进行判断是否满足等待条件,如果成立就会立即返回,如果不成立,就会一直等待,直到等待你指定的最长等待时间,如果还是不满足,就会抛出异常,如果满足了就会正常返回

from selenium import webdriverfrom seleniumwebdrivercommonby import Byfrom seleniumwebdriversupportui import WebDriverWaitfrom seleniumwebdriversupport import expected_conditions as EC

browser = webdriverChrome()

browserget('taobaocom/')

wait = WebDriverWait(browser, 10)

input = waituntil(ECpresence_of_element_located((ByID, 'q')))

button = waituntil(ECelement_to_be_clickable((ByCSS_SELECTOR, 'btn-search')))print(input, button)

上述的例子中的条件:ECpresence_of_element_located()是确认元素是否已经出现了

ECelement_to_be_clickable()是确认元素是否是可点击的

常用的判断条件:

title_is 标题是某内容

title_contains 标题包含某内容

presence_of_element_located 元素加载出,传入定位元组,如(ByID, 'p')

visibility_of_element_located 元素可见,传入定位元组

visibility_of 可见,传入元素对象

presence_of_all_elements_located 所有元素加载出

text_to_be_present_in_element 某个元素文本包含某文字

text_to_be_present_in_element_value 某个元素值包含某文字

frame_to_be_available_and_switch_to_it frame加载并切换

invisibility_of_element_located 元素不可见

element_to_be_clickable 元素可点击

staleness_of 判断一个元素是否仍在DOM,可判断页面是否已经刷新

element_to_be_selected 元素可选择,传元素对象

element_located_to_be_selected 元素可选择,传入定位元组

element_selection_state_to_be 传入元素对象以及状态,相等返回True,否则返回False

element_located_selection_state_to_be 传入定位元组以及状态,相等返回True,否则返回False

alert_is_present 是否出现Alert

浏览器的前进和后退

back()

forward()

import timefrom selenium import webdriver

browser = webdriverChrome()

browserget('wwbaiducom/')

browserget('aobaocom/')

browserget('wwpythonorg/')

browserback()

timesleep(1)

browserforward()

browserclose()

cookie *** 作

get_cookies()

delete_all_cookes()

add_cookie()

from selenium import webdriver

browser = webdriverChrome()

browserget('om/explore')print(browserget_cookies())

browseradd_cookie({'name': 'name', 'domain': '>

选项卡管理

通过执行js命令实现新开选项卡windowopen()

不同的选项卡是存在列表里browserwindow_handles

通过browserwindow_handles[0]就可以 *** 作第一个选项卡

import timefrom selenium import webdriver

browser = webdriverChrome()

browserget('baiducom')

browserexecute_script('windowopen()')print(browserwindow_handles)

browserswitch_to_window(browserwindow_handles[1])

browserget('baocom')

timesleep(1)

browserswitch_to_window(browserwindow_handles[0])

browserget('honorg')

异常处理

这里只进行简单的演示,查找一个不存在的元素

from selenium import webdriverfrom seleniumcommonexceptions import TimeoutException, NoSuchElementException

browser = webdriverChrome()try:

browserget('ducom')except TimeoutException:    print('Time Out')try:

browserfind_element_by_id('hello')except NoSuchElementException:    print('No Element')finally:

browserclose()

所有的努力都值得期许,每一份梦想都应该灌溉!

什么是异常

顾名思义,作为程序员的一种常用术语,“异常”与任何特定的编程语言无关。它属于程序因为突然中止,而未能交付出预期输出的事件。通常,引发异常出现的潜在因素往往来自如下方面:

· Java虚拟内存(JVM)的不足

· 请求访问的文件在目标系统中不存在

· 用户提供了无效的数据

· 在正常的通信过程中突然出现断网

Java中的异常类型

1 已查明的异常(Checked Exceptions):编译器在编译的过程中,会检查到这些异常,并验证它们是否已被处理。如果未被处理,系统会报告编译错误。因此它们被通称为编译时异常(compile-time exceptions)。下面是一些常见的此类异常示例:

· SQLException:程序在基于 SQL 语法执行 数据库 查询时,可能会产生此类异常。

· IOException:程序在文件上执行无效的I/O流 *** 作时,可能会产生此类异常。

· ClassNotFoundException:当JVM无法找到所需的Java类时,可能会产生此类异常。

2 未查明的异常(Unchecked Exceptions):这些异常是在程序的执行期间发生的逻辑错误,因此通常称为运行时异常(Runtime Exceptions)。此类异常在编译时未被检查出来,或者在整个编译过程中已被忽略。下面是一些典型的此类异常示例:

· NullPointerException:当访问具有空值的对象时,可能会产生此类异常。

· ArrayIndexOutofBound:当使用无效的索引值去访问数组时,可能会产生此类异常。

· IllegalArgumentException:当程序将不正确的参数传递给方法时,可能会产生此类异常。

· NumberFormatException:当程序将字符串传递给无法转换为数字的方法时,可能会产生此类异常。

· ArithmeticException:当程序执行不正确的算术运算(例如将数字除以零)时,可能会产生此类异常。

异常处理标准

通过对异常处理能力的提升,我们不仅可以保持代码的整洁,而且能够增强其可维护性、可扩展性和可阅读性。当然,不同的面向对象编程(Object-Oriented Programming,OOP)语言,具有不同的异常处理方法。以下是一些常用的Java异常处理标准:

Try-Catch:该关键字组合可被用于捕获异常。其中,try块应当被放在开头,而catch块应被放在try块的末尾,以便捕获异常,并采取必要的行动。也就是说,我们可以在遇到异常时,创建异常类的对象,以便使用以下预定义的方法,来显示调试信息:

· printStackTrace():该函数可用于打印栈的跟踪、异常的名称、以及其他重要的异常信息。

· getMessage():此函数有助于获取针对异常的深入描述。

try

{

// Code

} catch(Exception e){

// Code for Handling exception

}

同时,Try-Catch块也可以用其他高级方法来处理异常,例如,我们可能希望从单个代码块中捕获多个异常,那么就可以通过在try块之后的多个catch块,去处理不同的异常。而且,我们在try块之后,使用无限数量的catch块。

try

{

//Code

} catch(ExceptionType1 e1){

//Code for Handling Exception 1

} catch(ExceptionType2 e2){

//Code for Handling Exception 2

}

Throw/Throws:如果程序员想显式地抛出异常,那么可以使用throw关键字,与要在运行时处理的异常对象协同使用。

public static void exceptionProgram()throws Exception{

try {

// write your code here

} Catch(Exception b){

// Throw an Exception explicitly

throw(b); }

}

如果开发者想抛出多个异常,则可以通过在方法签名的子句中使用throws关键字来抛出,并且由方法的调用者去进行异常处理。

public static void exceptionProgram()throws ExceptionType1, ExceptionType2{

try {

// write your code here

} catch(ExceptionType1 e1){

// Code to handle exception 1

} catch(ExceptionType1 e2){

// Code to handle exception 2

}

finally:该个代码块往往是在try-catch块之后被创建的。也就是说,无论是否抛出异常,它都会被执行。

try {

//Code

} catch(ExceptionType1 e1){

//Catch block

} catch(ExceptionType2 e2){

//Catch block

} finally {

//The finally block always executes

}

Selenium中的常见异常

WebDriverException定义了Selenium中的多种异常,我们从中选取最常见的异常予以介绍,并配上简单的针对Selenium的异常处理方案:

1 NoSuchElementException

当WebDriver无法定位所需要元素时,Selenium可能会产生此类异常。此处的NoSuchElementException是NotFoundException类的子类,它通常出现在程序使用了无效的定位器时。

此外,如果WebDriver仍然停留在上一页、或正在加载下一页,而所需的定位器已到达了下一页时,就会因为该延迟而出现异常。为此,我们应当通过适当的等待处理 测试 ,最大限度地减少此类异常的发生。

当然,此类异常可以在catch块中被捕获到,并且可以在其中执行所需的 *** 作,以继续完成自动化的测试。例如:

try { driverfindElement(Byid("form-save"))click(); } catch(NoSuchElementException e){

Systemoutprintln(“WebDriver couldn’t locate the element”); }

2 NoSuchWindowException

该异常也是NotFoundException类的子类。如果WebDriver尝试着切换到无效的 浏览器 窗口,那么WebDriver将抛出NoSuchWindowException。因此,要实现窗口切换的好方法是,首先获取活动窗口的会话,然后在对应的窗口上执行所需的 *** 作。例如:

for(String windowHandle : drivergetWindowHandles()){

try { driverswitchTo()window(handle); } catch(NoSuchWindowException e){ Systemoutprintln(“Exception while switching browser window”); }

}

3 NoAlertPresentException

当WebDriver尝试着切换到某个不存在或无效的警报时,Selenium可能会产生此类异常。对此,我建议开发者使用显式、或适当的等待时间,来处理浏览器的各类警报。倘若仍然等不到警报的话,catch块可以捕获该异常。例如:

try {

driverswitchTo()alert()accept(); } catch(NoSuchAlertException e){

Systemoutprintln(“WebDriver couldn’t locate the Alert”); }

4 ElementNotVisibleException

该异常被定义为ElementNotInteractableException类的子类。当WebDriver尝试着对不可见的元素、或不可交互的元素执行各项 *** 作时,Selenium可能会产生此类异常。对此,我建议开发者在的确需要之处,让Selenium进行适当的超时等待。例如:

try { driverfindElement(Byid("form-save"))click(); } catch(ElementNotVisibleException e){

Systemoutprintln(“WebDriver couldn’t locate the element”); }

5 ElementNotSelectableException

该异常属于InvalidElementStateException类的子类。在Selenium中,ElementNotSelectableException表明某个元素虽然存在于网页上,但是无法被WebDriver所选择。

catch块不但可以处理Selenium中的此类异常,而且可以使用相同或不同的 技术 ,重新选择相同的元素。例如:

try {

Select dropdown = new Select(driverfindElement(Byid(“swift”))); } catch(ElementNotSelectableException e){

Systemoutprintln("Element could not be selected")}

6 NoSuchSessionException

Selenium通过driverquit()命令退出自动化的浏览器会话后,以及在调用某个测试方法时,会产生此类异常。当然,如果浏览器崩溃或出现断网,该异常也可能会发生。为了避免出现NoSuchSessionException,我们可以在测试套件结束时,退出浏览器,并确保用于 自动化测试 的浏览器版本的稳定性。例如:

private WebDriver driver;

@BeforeSuite

public void setUp(){ driver = new ChromeDriver(); }

@AfterSuite

public void tearDown(){ driverquit(); }

7 StaleElementReferenceException

当DOM中不再存在程序所需的元素时,Selenium将抛出StaleElementReferenceException。当然,如果DOM未能被正确加载、或WebDriver被卡在错误的页面上时,也可能会产生这种异常。对此,您可以使用catch块捕获该异常,并且使用动态的XPath、或尝试着重新刷新页面。例如:

try { driverfindElement(Byxpath(“//[contains(@id,firstname’)]”))sendKeys(“Aaron”);

} catch(StaleElementReferenceException e){

Systemoutprintln("Could not interact with a desired element")}

8 TimeoutException

当WebDriver超过了执行下一步的等待时限时,Selenium中可能会产生此类异常。Selenium的各种等待通常被用于避免出现ElementNotVisibleException之类的异常。不过,即使在使用了适当的等待之后,如果元素仍然不可交互,那么TimeoutException也会被抛出。为此,我们必须通过执行手动测试,来检验元素的延时性,以便采取进一步的处理等待。

9 InvalidSelectorException

当使用无效的或不正确的选择器时,Selenium中会抛出此类异常。当然,类似情况也可能发生在创建XPATH时。对此,我们需要在将代码推送到主分支之前,检查测试脚本,并测试脚本的端到端流程。此外,SelectorHub和ChroPath等工具,也可以被用于验证定位器。

10 NoSuchFrameException

NoSuchFrameException属于NotFoundException类的子类。当WebDriver尝试着切换到当前网页上无效的、或不存在的框架时,Selenium可能会产生此类异常。为此,我们需要首先确保框架的名称或id是正确的;其次,应确保框架的加载不会过于消耗时间。当然,如果在网页上加载框架的确非常耗时的话,则需要修正相应的等待处理。例如:

try {

driverswitchTo()frame("frame_1"); } catch(NoSuchFrameException e){

Systemoutprintln("Could not find the desired frame")

}

小结

综上所述,为了适应各种场景,异常处理对于任何自动化脚本和逻辑结构都是至关重要的。请您务必在了解每个异常特征的基础上,有选择性地在自动化脚本中使用上述十种有关Selenium的常用异常处理命令。

您好,对于你的遇到的问题,我很高兴能为你提供帮助,我之前也遇到过哟,以下是我的个人看法,希望能帮助到你,若有错误,还望见谅!。与使用FireFox、IE测试基本一样。前提是需要Chrome的驱动程序,可以单独下载,然后至于何时的位置,在脚本中指明该驱动所在的位置即可。如使用IE测试:

下载IEDriver(IE的驱动);

在脚本中使用命令指定驱动所在的位置;非常感谢您的耐心观看,如有帮助请采纳,祝生活愉快!谢谢!

如果屏幕没有锁定,可以毫无问题地执行Selenium脚本。根据组织政策,系统将在3分钟不活动后自动锁定(但系统永远不会睡眠或休眠)。

Selenium是一套完整的Web应用程序测试系统,它包含了测试的录制(Selenium IDE)、编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可运行于任何支持JavaScript的浏览器上。Selenium Core由一种指定格式的HTML文件驱动,在一定程度上增强了测试套件(Test Suite)的可读性。Selenium Remote Control允许测试人员使用常见的语言(自然包括C#等NET语言)编写测试代码,并支持不同 *** 作系统下的各种主流浏览器。Selenium Grid的作用是将测试分发至多台机器,这样便可大大加快测试速度。与WatiN相同,Selenium也是一款同样使用Apache License 20协议发布的开源框架。

窗口切换

我们在使用 浏览器 打开链接时,通常会存在2种情况:

1 在当前窗口打开,即覆盖。

2 新建窗口打开,保留原有窗口。

示例:

· 百度 首页搜索:博客园。

· 打开博客园官网,获取当前页精华帖的标题。

· 回到百度输入框,并打印出 title。

代码如下:

from selenium import webdriver

driver = webdriverChrome()

driverimplicitly_wait(10)

# 打开百度首页

driverget('>

以上就是关于win10桌面图标异常,求助全部的内容,包括:win10桌面图标异常,求助、用python写爬虫程序怎么调用工具包selenium、你需要知道的有关Selenium异常处理的都在这儿等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10623965.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存