selenium遇到问题_丹丹

合集下载

selenium自动化测试面试题及答案

selenium自动化测试面试题及答案

selenium自动化测试面试题及答案在软件开发过程中,自动化测试是一个重要的环节。

Selenium作为一种常用的自动化测试工具,在面试中经常被提及。

本文将介绍一些与Selenium自动化测试相关的常见面试题,并提供相应的答案。

1. 什么是Selenium?它的主要特点是什么?Selenium是一个开源的自动化测试框架,用于在Web应用程序上执行自动化测试。

它支持多种编程语言(如Java、Python、C#等),能够模拟用户行为来进行Web应用的自动化测试。

主要特点包括:- 跨平台:Selenium支持多种操作系统(如Windows、Mac、Linux)和多种浏览器(如Chrome、Firefox、Edge等)。

- 灵活可扩展:Selenium提供多种API和插件,方便用户根据实际需求进行自定义扩展。

- 多种定位方式:Selenium支持通过ID、类名、标签名、链接文本等多种方式来定位元素。

2. 请介绍一下Selenium WebDriver和Selenium IDE的区别。

Selenium WebDriver是Selenium的核心组件,用于编写和执行自动化测试脚本。

它提供了丰富的API和方法,使得测试脚本编写更加灵活和强大。

Selenium IDE是Selenium的一个插件,它是一个基于浏览器的录制和回放工具。

通过录制用户的操作,生成对应的测试脚本。

相比于WebDriver,Selenium IDE的功能相对简单,适用于一些简单的测试场景。

3. 请介绍一下Selenium Grid的作用和原理。

Selenium Grid用于执行分布式测试,可以同时在多台机器上执行测试,加快测试的执行速度。

它包含一个中心控制节点(Hub)和多个被控制节点(Node)。

当测试被提交到中心控制节点时,中心控制节点将测试分发给可用的被控制节点执行。

被控制节点执行完测试后,将测试结果返回给中心控制节点。

通过Selenium Grid,可以实现在不同浏览器和操作系统上的并行测试,提高测试效率。

Selenium常见异常解析及解决方案示范

Selenium常见异常解析及解决方案示范

Selenium常见异常解析及解决⽅案⽰范pycharm中导⼊selenium报错现象: pycharm中输⼊from selenium import webdriver, selenium标红原因1: pycharm使⽤的虚拟环境中没有安装selenium,解决⽅法: 在pycharm中通过设置或terminal⾯板重新安装selenium原因2: 当前项⽬下有selenium.py,和系统包名冲突导致,解决⽅法,重命名这个⽂件驱动及本地服务类异常未找到响应的浏览器驱动WebDriverException: Message: 'geckodriver' executable needs to be in PATH.或WebDriverException: Message: 'chromedriver' executable needs to be in PATH.原因: 查找不到对应的浏览器驱动解决⽅法: 下载浏览器对应版本的chromedriver或geckodrivergeckodriver放到脚本当前⽂件夹下或将路径配置到环境变量中, 或放到Python⽬录的Scripts下(⼀般情况下Python的Scripts⽬录在环境变量中), 或使⽤浏览器选项options指定驱动路径未找到浏览器WebDriverException: Message Can not connect to the Service chromedriverorg.openqa.selenium.WebDriverException: Failed to connect to binary FirefoxBinary原因: 在默认路径下未找到Firefox浏览器解决⽅法: 重新安装Firefox浏览器驱动和浏览器不匹配SessionNotCreatedException: Message: session not created:this version of ChromeDriver only supports Chrome version 76原因: 当前使⽤chromedriver只⽀持Chrome76版本解决⽅法: 查看本地Chrome浏览器的版本, 下载对应的chromedriver驱动被防⽕墙拦截WebDr iverException: Message: Can not connect to the Service IEDriverServer.exe原因: iedriverserver.exe被防⽕墙拦截解决⽅法: 防⽕墙设置允许连接不上chromedriver服务WebDriverException: Message: Can not connect ot the Service chromedriver原因: 脚本通过127.0.0.1这个ip访问本地chromedriver服务, hosts中未配置 127.0.0.1指向localhost解决办法: 配置本地hosts, 添加:127.0.0.1 localhost6.RemoteDriverServerException: 远程服务器异常, 解决⽅法: 确认webdriver.Remote()中的远程Webdriver服务是否OK7. ErrorInResponseException: Webdriver服务器响应异常, 解决⽅法, 根据具体报错信息分析找不到类异常: 定位/获取属性/切换警告框,Frame, 窗⼝1. NoSuchElementException: 找不到元素, 解决⽅法: 前⾯加上sleep等待后重试,或换⼀种定位⽅式2. NoSuchAttributeException: 元素没有这个属性, 解决⽅法: 确认定位到的元素是否⽬标元素, 检查属性拼写3. NoAlertPresentException:没有找到alert弹出框, 解决⽅法: 观察页⾯,查看是否有弹框出现, 加上等待或作为偶现元素处理4. NoSuchFrameException:没有找到指定的frame或iframe, 解决⽅法: 查看拼写或切换使⽤frame的id/name/index/定位到的frame5. NoSuchWindowException: 没找到窗⼝句柄指定的窗⼝, 解决⽅法: 查看使⽤的窗⼝句柄变量拼写6. UnexpectedAlertPresentException: 出现了弹框⽽未处理, 解决⽅法: 切换到警告框并处理, 如果偶现,使⽤try...except处理偶现弹框7. InvalidSwitchToTargetException: 切换到指定frame或窗⼝报错, 解决⽅法: 查看相应的frame或窗⼝是否能定位到8. UnexpectedTagNameException: 使⽤Tag Name不合法, 解决⽅法: 检查拼写或使⽤css selector/xpath9. TimeoutException:查找元素或操作超时, 解决⽅法, 稍后重试元素操作异常类: 隐藏/不可操作状态1. ElementNotVisibleException:元素不可见异常, selenium不能直接操作隐藏元素, 解决⽅法: 加上等待, 使⽤正常步骤使元素显⽰, 或使⽤js找到该元素的祖先节点的隐藏属性(通常为styple="display: none"), 移除该属性然后定位操作.2. StaleElementReferenceException: 陈旧元素引⽤异常, 页⾯刷新或跳转后使⽤了之前定位到的元素, 解决⽅法: 重新定位元素并操作3. InvalidElementStateException: 元素状态异常元素只读/不可点击等, 解决⽅法, 等待或使⽤js移除元素readonly/disable等限制属性后操作4. ElementNotSelectableException:元素不可被选中, 解决⽅法: 确认原始是否为select标签, 是否禁⽤5. InvalidSelectorException: 使⽤的定位⽅法不⽀持或xpath语法错误, 未返回元素, 解决⽅法: 检查使⽤的元素定位器是否拆包, 使⽤find_element()⽅法是, 第⼀个参数为'class name', 'link text', 'particial link text' 'css selector', 空格分开, ⾮下划线连接, 建议使⽤By.CLASS_NAME的⽅式. 使⽤chrome开发着⼯具+Ctrl+F搜索验证⾃⼰写的xpath语法.6. MoveTargetOutOfBoundsException: 使⽤ActionChains的move⽅法时移动到的位置不合适Cookie存取相关异常1. InvalidCookieDomainException: Cookie相应的域名⽆效2. UnableToSetCookieException: 设置Cookie异常IME输⼊法引擎异常1. ImeNotAvailableException: 服务器不⽀持输⼊法2. ImeActivationFailedException: 输⼊法激活异常以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

selenium中碰到的印象深刻的问题

selenium中碰到的印象深刻的问题

在使用Selenium自动化测试工具的过程中,我们可能会遇到一些印象深刻的问题,这些问题不仅可以帮助我们更深入地理解Selenium,还可以帮助我们更好地应对类似的挑战。

下面我将就我在使用Selenium中碰到的一些印象深刻的问题进行共享和探讨。

1. 元素定位困难在使用Selenium时,经常会遇到元素定位困难的问题。

可能是因为页面结构复杂,元素属性变化频繁,也可能是因为对定位方法的选择不当。

针对这个问题,我发现可以通过使用XPath或CSS选择器来精确定位元素,同时结合WebDriver的显示等待机制,来保证元素在页面加载完全后再进行操作,可以有效解决元素定位困难的问题。

2. 多窗口和框架处理另一个令我印象深刻的问题是在处理多窗口和框架时的困难。

在实际应用中,很多网页会使用iframe框架或者弹出新窗口来展示内容,这给自动化测试带来了挑战。

解决这个问题的关键在于掌握Selenium 提供的switch_to.frame()和window_handles等方法,通过这些方法可以实现在不同的窗口和框架之间进行切换,从而顺利完成测试。

3. 浏览器兼容性问题随着浏览器的不断更新和演变,Selenium在不同浏览器上的兼容性也是一个令人头疼的问题。

我在使用Selenium进行测试时,曾经碰到过在Chrome浏览器上运行正常,但在Firefox或者Edge浏览器上出现异常的情况。

为了解决这个问题,我学习了Selenium提供的WebDriverManager工具,可以自动下载和管理浏览器驱动,保证在不同浏览器上的稳定运行。

总结回顾:通过上面的探讨,我对Selenium中遇到的一些印象深刻的问题有了更深入的理解。

元素定位困难、多窗口和框架处理、浏览器兼容性问题,这些都是实际应用中常见的挑战,但只要掌握了相应的方法和技巧,就可以轻松解决。

我个人认为,更深入地了解和掌握Selenium 的原理和机制,可以帮助我们更好地应对类似的挑战,提高自动化测试的效率和稳定性。

selenium find_element方法 -回复

selenium find_element方法 -回复

selenium find_element方法-回复selenium find_element 方法是selenium库中一个非常重要的方法,用于定位网页元素。

在自动化测试中,定位元素是非常关键的一步,因为后续的操作和断言都需要基于元素的定位来进行。

本文将详细介绍selenium 的find_element方法,并提供一步一步的使用示例。

# 一、Selenium简介Selenium是一个自动化测试框架,可以通过编程语言来自动化地操作浏览器,并进行网页测试。

它支持多种浏览器,包括Chrome、Firefox、IE 等。

Selenium主要包含三个模块:WebDriver、RC和IDE。

其中WebDriver是最常用的模块,也是我们本文的重点。

Selenium WebDriver是一个用于浏览器自动化的工具,它可以通过API 来控制浏览器,模拟用户操作。

我们可以使用它来打开网页、输入文本、点击按钮、获取元素等等。

而find_element方法就是用于获取网页元素的方法,可以通过CSS选择器、XPath、名称、类名等方式来定位元素。

# 二、find_element方法介绍在Selenium的WebDriver中,find_element方法用于在网页中查找一个元素,如果找到该元素,则返回该元素;如果找不到该元素,则抛出NoSuchElementException 异常。

find_element接受两个参数:定位方式(By)和定位值(value)。

定位方式用于指定定位的方式,常用的定位方式包括id、name、class_name、tag_name、link_text、partial_link_text、xpath和css_selector等。

定位值用于指定元素在网页中的标识,比如元素的id、class、文本内容等。

# 三、使用示例下面我们通过一个具体的示例来演示如何使用find_element方法进行元素定位。

selenium对存在合并单元格的处理

selenium对存在合并单元格的处理

标题:selenium对存在合并单元格的处理一、概述在进行网页自动化测试时,我们经常会使用selenium来模拟用户的操作,获取页面元素的信息,以及进行各种操作。

然而,当页面存在合并单元格的情况时,selenium的处理方式可能会受到影响,导致我们无法准确地获取或操作这些单元格。

二、合并单元格的影响1. 难以定位:当网页中存在合并单元格时,selenium常用的定位方式可能会失效,无法准确定位到目标单元格。

2. 获取内容困难:由于合并单元格的存在,获取单元格内容、属性等信息也会变得困难,可能需要使用其他手段才能成功获取信息。

3. 操作受限:对于合并单元格,一些操作可能无法顺利进行,比如点击、输入等操作。

三、解决方案针对合并单元格的存在,我们可以考虑以下几种解决方案来处理这一问题:1. 使用XPath定位:XPath是一种功能强大的定位方式,在处理合并单元格时可能会更加灵活有效。

可以尝试使用XPath表达式来定位目标单元格,以解决定位问题。

2. 分割合并单元格:在一些情况下,我们可以通过编写JavaScript脚本来对合并单元格进行分割,使其变成普通的单元格,从而简化定位和获取内容的操作。

3. 借助JavaScript执行操作:对于无法直接操作的合并单元格,我们可以借助JavaScript执行一些特定的操作,比如点击、输入等,以达到我们的预期效果。

四、实际操作示例下面通过一个实际的案例来演示如何使用selenium处理存在合并单元格的情况。

假设我们要测试一个网页上的表格,其中存在合并单元格,我们需要定位到合并单元格,并获取其内容。

我们可以尝试使用XPath表达式来定位目标单元格,如下所示:```driver.find_element_by_xpath("//table//tr[1]/td[3]").text```这里利用了XPath表达式来定位第一行第三列的单元格,通过.text方法来获取其内容。

selenium中elementnotinteractableexception

selenium中elementnotinteractableexception

selenium中elementnotinteractableexception Selenium中的ElementNotInteractableException是一个常见的异常,经常出现在网页测试和自动化测试中。

它发生在试图与页面上的一个元素交互时,但该元素无法与用户交互,例如无法点击、输入文本等操作。

本文将对ElementNotInteractableException进行详细解释,并提供一步一步的解决方案。

第一部分:异常的原因和背景在介绍ElementNotInteractableException之前,我们先了解一些相关的背景知识。

Selenium是一个用于Web应用程序自动化测试的强大工具,它可以模拟用户在Web浏览器上的操作。

开发人员可以使用Selenium来编写测试脚本,以自动执行各种操作,如点击按钮、输入文本、选择下拉选项等。

当我们使用Selenium执行这些操作时,有时会遇到ElementNotInteractableException。

这个异常的主要原因是页面上的元素虽然存在,但是由于某种原因无法与用户交互。

可能的原因包括元素被其他元素覆盖、元素被隐藏、元素不可见、元素被禁用等。

第二部分:识别ElementNotInteractableException的方法在编写Selenium测试脚本时,如果某个操作无法被执行并抛出ElementNotInteractableException异常,我们需要将其捕获并进行处理。

为了识别该异常,我们可以使用try-catch语句将待执行的操作包裹起来,并在catch块中处理该异常。

下面是一个使用Selenium的Java绑定编写的示例代码:javatry {WebElement element = driver.findElement(By.id("elementId"));element.click();} catch (ElementNotInteractableException e) {处理异常,如打印日志或执行备用操作}在上述示例代码中,我们尝试对id为"elementId"的元素进行点击操作。

selenium中elementnotinteractableexception -回复

selenium中elementnotinteractableexception -回复

selenium中elementnotinteractableexception-回复selenium中的elementnotinteractableexception是一个常见的错误,经常出现在自动化测试过程中。

当使用selenium加载一个Web页面并尝试与页面上的元素进行交互时,这个异常就会被抛出。

这篇文章将解释elementnotinteractableexception的含义,为什么它会出现,以及如何解决这个问题。

第一部分:elementnotinteractableexception的含义elementnotinteractableexception是selenium中的一个异常类名,它表示一个元素无法与之交互。

换句话说,当你试图点击、输入或操作一个元素,但它对用户不可见或不在可交互的状态时,就会发生这个异常。

它是selenium的一种保护机制,确保在元素显得可以交互之前,测试程序不会与该元素进行交互。

第二部分:为什么会出现elementnotinteractableexception1. 元素被隐藏:元素可能被隐藏起来,例如通过CSS属性display: none 或visibility: hidden。

在这种情况下,元素并不可见,因此无法进行交互。

2. 元素处于不活动状态:元素可能有一个属性disabled或readonly,使其处于不活动状态。

这种情况下,元素看起来是可见的,但不能被用户交互。

3. 元素被覆盖:元素可能被其他元素覆盖,例如通过叠加的CSS属性或其他元素的位置。

在这种情况下,元素是可见的,但无法点击。

第三部分:如何解决elementnotinteractableexception1. 确保元素可见:在尝试与元素交互之前,确保元素是可见的。

可以使用selenium提供的方法,如is_displayed()来检查元素的可见性,或使用JavaScript通过修改元素的CSS属性来使其可见。

selenium中elementnotinteractableexception -回复

selenium中elementnotinteractableexception -回复

selenium中elementnotinteractableexception-回复Selenium中的ElementNotInteractableException错误是一种常见的异常,指示元素无法与用户进行交互。

当使用Selenium自动化测试工具进行Web应用程序的测试时,此异常通常会出现。

本文将通过一步步回答的方式,详细介绍ElementNotInteractableException错误的原因、解决方法以及在Selenium测试中的应用。

第一步:了解ElementNotInteractableException错误的原因ElementNotInteractableException错误通常是由以下几个原因引起的:1. 元素被其他元素遮挡:当一个元素被其他元素部分或完全遮挡时,Selenium无法与其进行交互。

例如,一个按钮被一个弹出窗口覆盖,那么就无法点击该按钮。

2. 元素被禁用或隐藏:某些元素在特定条件下可能会被禁用或隐藏。

例如,一个输入框在某些情况下不可编辑,或者一个下拉列表在未展开时不可见。

3. 元素没有足够的时间加载:有时,页面的加载速度可能会影响到元素的可交互性。

如果元素尚未完全加载,Selenium可能无法与其进行交互。

第二步:解决ElementNotInteractableException错误的方法针对ElementNotInteractableException错误,我们可以采取以下措施来解决:1. 检查元素的可见性和可用性:在尝试与元素进行交互之前,我们应该确保元素是可见的和可用的。

使用Selenium的ExpectedConditions类中的一些方法,如visibility_of_element_located和element_to_be_clickable,可以帮助我们判断元素是否可见和可用。

2. 使用JavaScript点击操作:如果一个元素被其他元素遮挡,或者无法通过常规的点击操作进行交互,我们可以使用JavaScript执行点击操作。

selenium unselectable元素

selenium unselectable元素

selenium unselectable元素
- 元素不是选择性的:尝试选择一个非选择性元素的操作,例如在一个普通的`div`元素上使用`.select()`方法。

解决方法是确保正在选择的元素是一个可选元素,例如下拉列表(<select>元素)。

- 元素被禁用:元素虽然看起来是可选的,但可能被设置为禁用状态,从而无法进行选择操作。

解决方法是在尝试选择元素之前,确保元素处于可选状态,例如没有被禁用。

- 错误的选择操作:使用错误的方法或操作来尝试选择元素,例如使用`.select()`方法来选择一个非下拉列表元素。

解决方法是使用正确的选择方法,如`.select_by_index()`、`.select_by_value()`或`.select_by_visible_text()`。

你可以使用上述方法来处理`ElementNotSelectable Exception`异常,以提高自动化测试的稳定性和可靠性。

使用pip安装selenium遇到的问题及解决方法

使用pip安装selenium遇到的问题及解决方法

使用pip安装selenium遇到的问题及解决方法
1. python已成功安装
3。

通过网上找到方法需更新pip版本:
3.1查看pip现有版本命令:pip list
3.2到此链接地址 /project/pip/#files 页面下载如下两个文件中一个即可:
pip-10.0.1-py2.py3-none-any.whl
pip-10.0.1.tar.gz
存放在d盘,然后进入命令提示符下执行进入d盘,最后执行安装命令:
d:\pip>python -m pip install pip-10.0.1-py2.py3-none-any.whl
安装完后再次查看pip的版本已是当前最新版本
4. 再次使用命令安装selenium,仍然报了之前同样的错误信息
5,到网上查找了很多方法,非常巧合的一个解答方案是需要关掉fiddler,而我当前正好开着fiddler,总算看到了成功的曙光了
6. 在关闭fiddler之后,再次执行命令安装selenium则成功了:
C:\Users\abbyllz>pip install selenium
Collecting selenium
Downloading
/packages/41/c6/78a9a0d0150dbf43095c6f422fdf6f948e18453c 5ebbf92384175b372ca2/selenium-3.13.0-py2.py3-none-any.whl (946kB)。

Python3+selenium配置常见报错解决方案

Python3+selenium配置常见报错解决方案

Python3+selenium配置常见报错解决⽅案第⼀个坑:'geckodriver' executable needs to be in PATH1.如果启动浏览器过程中报如下错误Traceback (most recent call last):File "<stdin>", line 1, in <module>File "D:\test\python3\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 145, in __init__self.service.start()File "D:\test\python3\lib\site-packages\selenium\webdriver\common\service.py", line 81, in startos.path.basename(self.path), self.start_error_message)mon.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.2.这个是因为最新的selenium3.0启动firefox需要geckodriver.exe这个驱动⽂件。

3.下载之后,配置到环境变量path下(可以直接放python根⽬录)第⼆坑:Expected browser binary location, but unable to find binary in default location1.如果启动浏览器过程中报如下错误:Traceback (most recent call last):File "<stdin>", line 1, in <module>File "D:\test\python3\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 155, in __init__keep_alive=True)File "D:\test\python3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 92, in __init__self.start_session(desired_capabilities, browser_profile)File "D:\test\python3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 179, in start_session response = self.execute(Command.NEW_SESSION, capabilities)File "D:\test\python3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 238, in executeself.error_handler.check_response(response)File "D:\test\python3\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 193, in check_response raise exception_class(message, screen, stacktrace)mon.exceptions.WebDriverException: Message: Expected browser binary location, but unable to find binary in default location,no 'moz:firefoxOptions.binary' capability provided, and no binary flag set on the command line.2.这个是因为firefox.exe这个⽂件也需要配置到环境变量path下。

selenium学习中遇到的问题

selenium学习中遇到的问题

selenium学习中遇到的问题1. Selenium IDE, Options > Format 选择Java / Junit 4 / Remote Control, 录制的Source代码仍旧不是Junit4的代码。

解决:打开IDE Options > Options, 选上Enable experimental features, 再设置Options > Format, 就可以得到Junit代码。

可通过⽂件 > Export Test Case As... > Java / Junit4 / Remote Control 保存得到代码。

2. 引⼊架包seleniumserver.jar 和 selenium-java-client-driver.jar架包之后,selenium字仍显⽰红杠杠。

解决:代码内加上定义selenium语句:private static DefaultSelenium selenium;3. ng.RuntimeException: Could not contact Selenium Server; have you started it on 'localhost:4444' ?Connection refused: connect解决:Selenium RC未启动,启动即可。

java -jar selenium-server-standalone-2.25.0.jar4. 不启动cmd运⾏selenium rc, 直接Java启动的⽅法。

解决:使⽤java代码如下SeleniumServer SELENIUM_SERVER;@Beforepublic void setUp() throws Exception {RemoteControlConfiguration rcc = new RemoteControlConfiguration();rcc.setPort(4444); //指定selenium server 开放端⼝SELENIUM_SERVER = new SeleniumServer(rcc);SELENIUM_SERVER.start(); //测试前启动server}@Afterpublic void tearDown() throws Exception {SELENIUM_SERVER.stop(); //测试结束停⽌server}5. 运⾏时出现错误WARNING: Failed to start:解决:出现这错误表⽰已经有另外⼀个Selenium server 启动了,可以通过ps -efa | grep selenium查看是否有其他的selenium server正在运⾏,如果有请将其关闭即可;否则就是有另外的服务器在使⽤4444端⼝,需要更换端⼝。

selenium常见问题

selenium常见问题

selenium常见问题1. ⾃动化代码中,⽤到了哪些设计模式?单例模式⼯⼚模式PO模式数据驱动模式2. 什么是断⾔?检查⼀个条件,如果它为真,就不做任何事,⽤例通过。

如果它为假,则会抛出 AssertError 并且包含错误信息。

3. UI ⾃动化测试中,如何做集群?Selenium Grid,分布式执⾏⽤例Appium 使⽤ STF 管理多设备Docker+K8S 管理集群4. 怎么对含有验证码的功能进⾏⾃动化测试?万能验证码测试环境屏蔽验证其他操作不推荐5. 如何优化和提⾼ Selenium 脚本的执⾏速度?尽量使⽤ by_css_selector() ⽅法by_css_selector() ⽅法的执⾏速度⽐ by_id() ⽅法的更快,因为源码中 by_id() ⽅法会被⾃动转成 by_css_selector() ⽅法处理;使⽤等待时,尽量使⽤显⽰等待,少⽤ sleep(),尽量不⽤隐式等待;尽量减少不必要的操作:可以直接访问页⾯的,不要通过点击操作访问;并发执⾏测试⽤例:同时执⾏多条测试⽤例,降低⽤例间的耦合;有些页⾯加载时间长,可以中断加载;6. 接⼝测试能发现哪些问题?可以发现很多在页⾯上操作发现不了的 bug;检查系统的异常处理能⼒;检查系统的安全性、稳定性;前端随便变,接⼝测好了,后端不⽤变;可以测试并发情况,⼀个账号,同时(⼤于 2 个请求)对最后⼀个商品下单,或不同账号,对最后⼀个商品下单;可以修改请求参数,突破前端页⾯输⼊限制(如⾦额);7. Selenium 中隐藏元素如何定位?如果单纯的定位的话,隐藏元素和普通不隐藏元素定位没啥区别,⽤正常定位⽅法就⾏了(这个很多⾯试官也搞不清楚);元素的属性隐藏和显⽰,主要是 type=“hidden” 和 style=“display: none;” 属性来控制的,接下来在元素属性⾥⾯让它隐藏,隐藏元素可以正常定位到,只是不能操作(定位元素和操作元素是两码事,很多初学者傻傻分不清楚),操作元素是 click,clear,send_keys 这些⽅法;JS 操作隐藏元素;8. 如何判断⼀个页⾯上元素是否存在?⽅法⼀:⽤ try…except…⽅法⼆:⽤ elements 定义⼀组元素⽅法,判断元素是否存在,存在返回 True,不存返回 False⽅法三:结合 WebDriverWait 和 expected_conditions 判断(推荐)9. 如何提⾼脚本的稳定性?不要右键复制 xpath(⼗万⼋千⾥那种路径,肯定不稳定),⾃⼰写相对路径,多⽤ id 为节点查找;定位没问题,第⼆个影响因素那就是等待了,sleep 等待尽量少⽤(影响执⾏时间);定位元素⽅法重新封装,结合 WebDriverWait 和 expected_conditions 判断元素⽅法,⾃⼰封装⼀套定位元素⽅法;10. 如何定位动态元素?动态元素有 2 种情况,⼀个是属性动态,⽐如 id 是动态的,定位时候,那就不要⽤ id 定位就是了;还有⼀种情况动态的,那就是这个元素⼀会在页⾯上⽅,⼀会在下⽅,飘忽不定的动态元素,定位⽅法也是⼀样,按 f12,根据元素属性定位(元素的 tag、name的步伐属性是不会变的,动的只是 class 属性和 styles 属性);11. 如何通过⼦元素定位⽗元素使⽤element.parent⽅法12. 平常遇到过哪些问题? ?如何解决的可以把平常遇到的元素定位的⼀些坑说下,然后说下为什么没定位到,⽐如动态 id、有 iframe、没加等待等因素;13. ⼀个元素明明定位到了,点击⽆效(也没报错),如果解决?使⽤ JS 点击,Selenium 有时候点击元素是会失效;14. 测试的数据你放在哪?对于账号密码,这种管全局的参数,可以⽤命令⾏参数,单独抽出来,写的配置⽂件⾥(如 ini);对于⼀些⼀次性消耗的数据,⽐如注册,每次注册不⼀样的数,可以⽤随机函数⽣成;对于⼀个接⼝有多组测试的参数,可以参数化,数据放 YAML,Text,JSON,Excel 都可以;对于可以反复使⽤的数据,⽐如订单的各种状态需要造数据的情况,可以放到数据库,每次数据初始化,⽤完后再清理;对于邮箱配置的⼀些参数,可以⽤ ini 配置⽂件;对于全部是独⽴的接⼝项⽬,可以⽤数据驱动⽅式,⽤ excel/csv 管理测试的接⼝数据;对于少量的静态数据,⽐如⼀个接⼝的测试数据,也就 2-3 组,可以写到 py脚本的开头,⼗年⼋年都不会变更的;15. 什么是数据驱动,如何参数化?参数化的思想是代码⽤例写好了后,不需要改代码,只需维护测试数据就可以了,并且根据不同的测试数据⽣成多个⽤例;16. 其他接⼝都需要登录接⼝的信息,怎么去让这个登录的接⼝只在其他接⼝调⽤⼀次?使⽤单例模式使⽤⾃定义缓存机制使⽤测试框架中的 setup 机制pytest 中 fixture 机制17. 接⼝产⽣的垃圾数据如何清理?造数据和数据清理,需⽤ python 连数据库了,做增删改查的操作测试⽤例前置操作,setUp 做数据准备后置操作,tearDown 做数据清理18. 怎么⽤接⼝案例去覆盖业务逻辑?考虑不同的业务场景,⼀个接⼝⾛过的流程是什么样的,流程的逻辑是什么样的,什么样的参数会有什么样的结果,多场景覆盖;。

Selenium常见报错问题(1)-先来认识下selenium常见异常类

Selenium常见报错问题(1)-先来认识下selenium常见异常类

Selenium常见报错问题(1)-先来认识下selenium常见异常类如果你在跑selenium脚本时,需要某些异常不知道怎么解决时,可以看看这⼀系列的⽂章,看看有没有你需要的答案最常见异常类异常:mon.exceptions.WebDriverException(msg=None, screen=None, stacktrace=None)基类:exceptions.Exception描述:WebDriver基础的异常类异常:mon.exceptions.TimeoutException(msg=None, screen=None, stacktrace=None)基类: mon.exceptions.WebDriverException描述:⼀条命令在⾜够的时间内没有完成则会抛出异常异常:mon.exceptions.StaleElementReferenceException(msg=None, screen=None, stacktrace=None)基类: mon.exceptions.WebDriverException描述:⼀个参考的元素现在是“过时”时抛出异常,“过时”是指这个元素不再出现在页⾯的Dom中。

异常:mon.exceptions.NoSuchElementException(msg=None, screen=None, stacktrace=None)基类:mon.exceptions.WebDriverException描述:元素不能被找到时异常抛出异常:mon.exceptions.NoSuchAttributeException(msg=None, screen=None, stacktrace=None)基类:mon.exceptions.WebDriverException描述:当元素的属性不能被发现时异常抛出异常:mon.exceptions.NoAlertPresentException(msg=None, screen=None, stacktrace=None)基类: mon.exceptions.WebDriverException描述:切换到没有弹出的alert弹窗时抛出异常异常:mon.exceptions.NoSuchFrameException(msg=None, screen=None, stacktrace=None)基类: mon.exceptions.InvalidSwitchToTargetException描述:切换进不存在的iframe窗⼝时抛出异常异常:mon.exceptions.InvalidElementStateException(msg=None, screen=None, stacktrace=None)基类: mon.exceptions.WebDriverException描述:⽆效的元素状态异常: mon.exceptions.ElementNotSelectableException(msg=None, screen=None, stacktrace=None)基类: mon.exceptions.InvalidElementStateException描述:当尝试选择⼀个不能被选中的元素时,异常会抛出异常:mon.exceptions.ElementNotVisibleException(msg=None, screen=None, stacktrace=None)基类: mon.exceptions.InvalidElementStateException描述:元素在DOM树中,但它是不可见的(display:none),操作该元素,异常将抛出不常见的异常类异常:mon.exceptions.ErrorInResponseException(response, msg)基类:mon.exceptions.WebDriverException描述:服务器端有错误时,异常将抛出(这个原因可能是因为Firefox插件或者远程server)异常:mon.exceptions.ImeActivationFailedException(msg=None, screen=None, stacktrace=None)基类: mon.exceptions.WebDriverException描述:激活输⼊法失败时异常会抛出。

Python与selenium自动化测试搭建遇到的问题处理

Python与selenium自动化测试搭建遇到的问题处理

Python与selenium⾃动化测试搭建遇到的问题处理⼀、前⾔以⾕歌浏览器chrome为例,Python+ selenium⾃动化测试⼯具搭建需要安装Python,⾕歌浏览器,浏览器驱动,phcharm。

⽹上都有些⽐较全的安装教程,但由于⾃⼰以前有安装过Python,⾕歌浏览器也⼀直在⽤,所以并不打算按图索骥那样按“步”就“搬”来搭建,只是想按旧的换新、稳定、适⽤的原则来搭建环境。

⼆、准备现有Python3.5,⾕歌89版本(原来⽤的是85版本),浏览器驱动未安装,未安装pycharm。

Python版本有些旧,打算升级。

能上外⽹,⾕歌浏览器被⾃动升级了,导致先前下载的浏览器驱动对应不上,后来debug的⼩程序⽆法正常运⾏,查看pycharm的错误描述,浏览器版本和浏览器驱动版本要对应,只能重新下载浏览器驱动。

下载链接地址:selenium 可在安装pycharm或者Python后安装选择:浏览器驱动先是下载⼀下85版本,后来浏览器被⾃动更新了,才下载了89版本的pycharm:个⼈选择下载community的下载Python:选择⽀持的系统版本下载,个⼈是win7系统,选择了稳定版,三、安装及遇到的问题解决pycharm 安装完成后,新建Python项⽬,打开File->setting,打开项⽬Python Interpreter,如果安装的Python版本不匹配,这⾥会提⽰Python版本不⽀持。

先前⽤的旧版本的Python,提⽰不⽀持后,⼿动卸载了Python,安装了新版本,但Pycharm 调试时直接崩溃了,只能重装使⽤新版本Python,pycharm才运⾏正常。

因电脑上已安装有旧版本的Python3.5.2,没有找到便捷的升级⽅法,找到的⼀种更新⽅法是打开相应版本的安装包,会提⽰卸载、修复,选择卸载,然后安装新版本。

因此在Python官⽹上下载了Python3.5.2安装包,打开安装卸载当前版本。

selenium+python安装过程中遇到的问题

selenium+python安装过程中遇到的问题

selenium+python安装过程中遇到的问题问题⼀:先装了⽕狐46.0.1(D:\Tool\FireFox),感觉有些地⽅不⾏,在另外⼀个路径下安装了⽕狐52.0.1(D:\Tool\FireFox52)验证后感觉有问题,之后卸载了⽕狐52.0.1,结果原来可以运⾏登陆程序,报错。

报错内容:Traceback (most recent call last):File "D:\Tool\selenium\code\demo-6080登陆.py", line 3, in <module>dr=webdriver.Firefox()File "D:\Tool\selenium\Python\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 55, in __init__self.binary = firefox_binary or capabilities.get("binary", FirefoxBinary())File "D:\Tool\selenium\Python\lib\site-packages\selenium\webdriver\firefox\firefox_binary.py", line 50, in __init__"binary = FirefoxBinary('/path/to/binary')\ndriver = webdriver.Firefox(firefox_binary=binary)")Exception: Failed to find firefox binary. You can set it by specifying the path to 'firefox_binary':from selenium.webdriver.firefox.firefox_binary import FirefoxBinarybinary = FirefoxBinary('/path/to/binary')driver = webdriver.Firefox(firefox_binary=binary)解决⽅法:1. 卸载所有的⽕狐浏览器,不⽤重启电脑,然后重新安装⽕狐46.0.1版本,路径:D:\Tool\FireFox ,再次运⾏程序,就OK了报错原因:猜测同时装过⽕狐46 和⽕狐52版本,把⼀些信息给修改了,导致selenium不知道找不到对应的路径问题⼆:安装完Python,⽤cmd运⾏Python时报错报错内容:‘python’不是内部或外部命令,也不是可运⾏的程序或批处理⽂件。

PythonSelenium异常处理的实例分析

PythonSelenium异常处理的实例分析

PythonSelenium异常处理的实例分析1、说明在使⽤selenium时,不可避免的会遇到⼀些异常情况,⽐如超时、没有找到节点的错误等等。

⼀旦出现这样的错误,程序就不能再运⾏了。

这⾥我们可以使⽤tryexcept语句来捕捉异常。

2、实例from selenium import webdriverfrom mon.exceptions import TimeoutException, NoSuchElementExceptionbrowser = webdriver.Chrome()try:browser.get('https://')except TimeoutException:print('超时')try:browser.find_element_by_id('aa')except NoSuchElementException:print('未找到节点')finally:browser.close()关于异常处理的实例扩展:我是Python的新⼿,我正在尝试编写⼀个使⽤硒登录到Web应⽤程序并打印⼀些信息的nagios脚本。

到⽬前为⽌,该脚本可以按预期⼯作,但是如果它⽆法检索该⽹站,我希望它向系统发出警报。

这是我所拥有的#!/usr/bin/env pythonimport sysfrom selenium import webdriverurl = '<main web site>'systemInformation = '<sys information site>'logout = '<log out link>'browser = webdriver.PhantomJS('<path to phantomjs for headless operation>')login_username = '<username>'login_password = '<password>'try:browser.get(url)username = browser.find_element_by_name("username")password = browser.find_element_by_name("password")username.send_keys(login_username)password.send_keys(login_password)link = browser.find_element_by_name('loginbutton')link.click()browser.get(systemInformation)print "OK: Web Application is Running"for element in browser.find_elements_by_name('SystemReportsForm'):print element.textbrowser.get(logout)browser.quit()sys.exit(0)except:print "WARNING: Web Application is Down!"sys.exit(2)我希望如果第⼀部分失败,那么它将转到except部分,但是即使有出⼝,脚本也会打印出try和except。

Selenium面试问题和答案-2

Selenium面试问题和答案-2

Selenium⾯试问题和答案-21.你能解释下Selenium这个框架吗?这个问题在⾯试中被问到的概率还是⽐较⾼的,同样类似的问题有,selenium的原理是什么?⾸先不要被这个问题吓到,我们主要围绕selenium的历史版本演化和基本的组件去展开描述就好,最后回到webdriver这个组件上⾯,我们基本上都是在使⽤webdriver提供的API。

所以这个题⽬的最好的答案就是把图画出来,然后⾃⼰解释⼏句就可以。

早期Selenium1.0是有Selenium Grid,Selenium RC, Selenium IDE, Webdriver四部分组成,后来Selenium RC和Webdriver合并之后,就是Selenium2,当前我们在使⽤Selenium3Selenium Grid:它是selenium框架的⼀部分,主要是专门⽤来把测试⽤例并⾏地在不同浏览器,不同操作系统,不同机器上运⾏。

⼀般我们写脚本,调试都在单机上线性地⼀个测试⽤例接着⼀个测试⽤例执⾏下去。

如果有⼈问题如何提⾼测试⽤例执⾏效率,告诉他Selenium Grid可以实现。

Selenium IDE: 这个算Selenium⾥⾯最简单的⼀个组建,只⽀持在⽕狐浏览器上安装这个扩展程序,⽀持录制web ui脚本,然后导出不同语⾔的脚本,例如java c#等。

这个功能算鸡肋,因为很多时候导出脚本debug的时间还不如⾃⼰代码重新写来的快。

Selenium RC: RC是remote control的缩写,主要的功能就是让你不管使⽤什么语⾔(Selenium⽀持的这⼏种语⾔之⼀)来写测试脚本,只要是这个浏览器⽀持java script,那么写⼀遍测试脚本,都能在这些不同浏览器运⾏脚本。

Webdriver:这个是⽤来替代Selenium RC,就是⼀个⽹页⾃动化⼯具,⽀持在不同浏览器上运⾏测试脚本,运⾏速度⽐Selenium RC要快很多。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.运行脚本,报错:WebDriverException: Cannot find firefox binary in PATH
解决办法:
在代码里面加内容:
System.setProperty("webdriver.firefox.bin","C:\\Program
Files\\Mozilla Firefox\\Firefox.exe");
2. 运行脚本,火狐浏览器启动起来,但是页面空白,地址栏数据为空。

把system32-driver-host文件,localhost 127.0.0.1加到最上面,注意是最上面,否则还是没用。

3.查找一个类的子类快捷键。

(ctrl + t)
比如看webdriver 的子类有什么,想找到ie,就双击eclipse里面的webdriver,然后按下ctrl + t,就能看到它有多少个子类了。

4.静态类方法可以直接用类.方法名()直接调用,语句解释System.setProperty()。

System.setProperty("webdriver.firefox.bin","C:\\Program
Files\\Internet Explorer\\iexplore.exe");
WebDriver driver = new FirefoxDriver();
这里system是类,ng.system ,鼠标移动到eclipse里面的system上面,看见system是一个类,路径是ng.system。

然后按F3,可以看到该类下面所有的方法,知道setProperty()是静态方法,所以可以直接用类.方法名()这么使用。

5.查看一个类的方法的快捷键(F3)
在eclipse里面,把鼠标移动到类名上面,点击F3,可以查看该类下的所有内容和方法。

6.方法也可以返回类。

简介:在eclipse里面,鼠标移动到manage()上面,如果不是void 而是别的比如option,那说明manage()方法是有返回值的,返回的是option类。

举例:下面的写法就是类driver下的manage()返回的类option 的,timeouts()返回的类timeouts的,implicitlyWait方法。

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS) TimeUnit.SECONDS解释:枚举中的seconds类型,鼠标移动到TimeUnit上,按F3,可以看到该枚举包含很多种类型,有天、秒、微秒等等。

7. webdriver.ie.driver解释。

固定模式。

8.在营销登录界面,登录页面f12为什么看不到<iframe id="ol1388729766734_1o" frameBorder="0" frameSpacing="0" style="width: 100%; height: 100%;">下面的head及body的详细信息。

一定要进入到抄表区段页面,f12才能看到里面的详细信息。

每个页面,点击F12看到的内容是由前台开发人员决定的,和js文件也有关系,登录页面f12,看到的是默认的html页面,尤其是可以看到登录后界面的浅层元素,这都是开发人员这么布局的,登录后的深层元素还是需要到登录后的各个功能界面上点击f12才能看到详细的元素。

10.Eclipse中快捷键的使用:
类名上按下F2,可以添加序列号
ctrl+shift+o 批量导入包
f3后,点击link with edit 可以定位类位于什么地方。

ctr+shift+f 格式化
ctrl+shift+/注释
ctrl+shift+/取消注释
ctrl+shift+o批量导入包
f3后,点击link with edit 可以定位类位于什么地方。

ctr+shift+f 格式化
ctrl+shift+/注释
11.介绍driver.switchTo().activeElement();
答:脚本中不常使用,可以去掉。

12.测试过程中可以用到的方法element. findElement();
el = driver.findElement(By.xpath("//html/body/div[@class='tree']")); es.clear();
el = el.findElement(By.xpath("//div[@id='t78']"));
el.findElements(By.xpath("//td")).get(0).click();
get(0)
问题1:怎么想到有get(0)这个方法?
答:findElements(By.xpath("//td"))返回值是一个list,list里面有get 方法。

问题2:怎么识别@id='t78'在测试环境,id号会变化?
13. Class.forName("oracle.jdbc.driver.OracleDriver");
//这个相当于下面的语句:
oracle.jdbc.driver.OracleDriver object=new oracle.jdbc.driver.OracleDriver;该语句的作用是:通过字符串查找
类,并对该类进行初始化实例操作,把该类加载到jvm中。

14.泛型和反射:
泛型举例:public class Test<T> {
private T t;
public Test(T t2)
{
this.t = t2;
}
public T getT()
{
return t;
}
public static void main(String[] args) {
Test<String> ts = new Test<String>("Hello");
Test<Integer> ti = new Test<Integer>(32);
Test<Float> tf = new Test<Float>(44.f);
泛型除了可以用在数组上,也可以像如上方法一样使用。

反射和泛型通常在一起使用,是java高级基础知识中的内容,通常用于框架。

反射的作用是通过getclassname来找到类的属性、类的
方法、还可以实例化对象。

就像程序通过某类的class来照镜子一样,能看到该类中的所有内容。

15.driver.findElement(By.id(“”));括号里面为什么是by.Id?难道类.方法也可以作为入参?
答:在eclipse里面,鼠标移动到findElement()方法的入参是by 类型的,所以我们需要通过类.方法即By.id(“”)来返回一个by 类型的返回值。

这个返回值来作为findElement()方法的入参。

16.java构造函数是不能有返回类型的,所以在别的类里面调用构造函数是不能传入参的,但是可以在类里面另外写一个静态方法,在别的类里面调用这个方法的时候,直接写类名.方法名就可以调用了。

同时一个类里面的静态变量是供所有对象公用的,一个对象把这个静态变量的值改了,那么其它对象调用这个静态变量时,值也是最新变化的那个值。

17.throws Exception异常介绍:
Throws用于方法上面,通常情况下,写方法的作者会在方法体里面把该方法可能出现的异常列出来。

public void calculateNum(int a) throws ExceptionInInitializerError,NullPointerException {
if (a == 3)
throw new ExceptionInInitializerError ("异常类型1错误");
if (a == 4)
throw new NullPointerException ("异常类型2错误");
}
这样其它调用该方法的人就能看到该方法可能出现的异常,并且try 到这种异常时会catch异常并处理异常。

相关文档
最新文档