IEDriverServer_Win32_3.150版本下载指南与功能解析

版权申诉
0 下载量 13 浏览量 更新于2024-10-29 收藏 671KB RAR 举报
资源摘要信息:"IEDriverServer_Win32_3.150" 知识点: 1. IEDriverServer_Win32_3.150是什么? IEDriverServer_Win32_3.150是一个专门用于在Windows 32位操作系统上提供IE浏览器自动化测试的服务器程序。它是Selenium WebDriver的一个组成部分,允许测试人员通过Selenium2(也称为WebDriver)或selenium2Library控制Internet Explorer浏览器。 2. Selenium2(WebDriver)是什么? Selenium2,也被称为WebDriver,是一个用于自动化Web浏览器操作的工具,它允许开发者或QA工程师编写测试脚本,这些脚本可以模拟用户与Web浏览器的交互,比如点击按钮、填写表单、导航到不同的网页等操作。WebDriver提供了一套API,可以支持多种浏览器,并且能够提供更加复杂的测试场景。 3. 什么是selenium2Library? selenium2Library是一个基于Python的Selenium WebDriver封装库,它属于Robot Framework(一个通用的测试自动化框架)的第三方库。selenium2Library使得编写自动化测试用例变得更加简单,同时也使得测试用例更加易于维护和理解。 4. 为什么需要IEDriverServer? IEDriverServer是Selenium自动化测试过程中的一个必要组件。因为它提供了一个服务,使得Selenium能够与IE浏览器进行交互。没有安装IEDriverServer,Selenium WebDriver将无法控制IE浏览器,从而无法完成自动化测试。 5. 如何使用IEDriverServer_Win32_3.150? 要在Windows 32位系统上使用IEDriverServer,首先需要下载IEDriverServer_Win32_3.150版本的安装包。下载后,需要将IEDriverServer.exe文件放置在系统的PATH目录中,或者指定其路径在代码中。之后,通过Selenium WebDriver编写的测试脚本就可以调用IE浏览器执行预设的自动化测试任务了。 6. IEDriverServer的版本管理及兼容性问题? IEDriverServer_Win32_3.150是一个特定的版本号,表明其是Selenium WebDriver的稳定版本之一。随着Web技术的不断发展,浏览器和Selenium WebDriver都在不断更新,因此对于不同版本的IE浏览器,可能需要不同版本的IEDriverServer。在实际使用中,要检查IEDriverServer版本与测试的IE浏览器版本以及Selenium WebDriver版本的兼容性,以确保测试的顺利进行。 7. 安装和配置IEDriverServer_Win32_3.150的步骤: - 访问Selenium官方网站或其他可信赖的资源站点下载IEDriverServer_Win32_3.150版本。 - 将下载的IEDriverServer.exe文件解压并放置到一个合适的目录中。 - 根据测试脚本的编写方式,将IEDriverServer.exe的路径添加到系统的PATH环境变量中,或者直接在测试脚本中指定IEDriverServer.exe的完整路径。 - 在Selenium WebDriver脚本中,通过指定IEDriverServer的路径或利用系统环境变量,初始化InternetExplorerDriver类的实例,以创建和管理IE浏览器的自动化会话。 8. 关于压缩包子文件的文件名称列表中的"IEDriverServer_Win32_3.150.1"说明: 文件名称列表中的"IEDriverServer_Win32_3.150.1"表明这是一个版本号为3.150.1的IEDriverServer_Win32压缩包。其中".1"可能表示这是一个小的更新或修正版本,确保在某些特定场景下的稳定性和兼容性。在下载和使用时,要确认此小版本号是否满足自动化测试的需求。 9. 其他浏览器的WebDriver: IEDriverServer专注于IE浏览器,但Selenium WebDriver同样支持其他主流浏览器,比如ChromeDriver支持Google Chrome浏览器,GeckoDriver支持Mozilla Firefox浏览器。每种浏览器的WebDriver都有对应的驱动程序,以提供与浏览器的无缝交互。 10. 使用场景与限制: IEDriverServer_Win32_3.150主要适用于需要在Windows系统上进行IE浏览器自动化测试的场景。由于IE浏览器本身的市场份额逐渐减少,以及其对现代Web技术的支持有限,因此在新的测试项目中可能会考虑转向其他浏览器和它们对应的WebDriver。同时,IEDriverServer对于一些比较旧的IE版本提供了良好的支持,比如IE9和IE10,但对于IE11的支持需要特别注意版本兼容性问题。

优化这个sql SELECT count( 1 ) FROM ( SELECT B.ID, B.PURCHASE_REQUEST_ID, B.MATERIAL_ID, B.MATERIAL_CODE, B.MATERIAL_NAME, B.STANDARD, B.MODEL_ID, B.BILL_ROW_ID, B.BILL_NO, BILL_NAME, B.MODEL_CODE, B.MODEL_NAME, B.PARENT_MODEL_ID, B.PARENT_MODEL_CODE, B.PARENT_MODEL_NAME, B.UNIT_CODE, B.UNIT_NAME, B.PURCHASE_TYPE_CODE, CAST( NVL( B.APPLY_NUM, 0 ) AS NUMBER ( 24, 10 ) ) AS APPLY_NUM, CAST( NVL( B.DEAL_NUM, 0 ) AS NUMBER ( 24, 10 ) ) AS DEAL_NUM, CAST( NVL( B.RETURN_NUM, 0 ) AS NUMBER ( 24, 10 ) ) AS RETURN_NUM, B.DEAL_USER_ID, B.DEAL_USER_NAME, CAST( NVL( B.PRICE, 0 ) AS NUMBER ( 24, 10 ) ) AS PRICE, CAST( NVL( B.AMOUNT, 0 ) AS NUMBER ( 24, 10 ) ) AMOUNT, B.IMPLEMENT_CODE, B.IMPLEMENT_NAME, B.IMPLEMENT_INVEST_AMOUNT, B.PURCHASE_MANAGER_ID, B.PURCHASE_MANAGER_NAME, B.PROVIDER_ID, B.PROVIDER_NAME, B.REMARK, B.DELIVER_AREA, B.DELIVER_ADDRESS, B.RECEIVE_PEOPLE, B.RECEIVE_PEOPLE_PHONE, B.ITEM_STATUS, B.COST_CENTER, B.COST_BUDGET_CODE, B.COST_IMPLEMENT_NAME, B.FRAME_CONT_ID, B.FRAME_CONT_CODE, B.FRAME_CONT_NAME, B.DETAIL_CONFIG, B.PURCHASE_CATEGORY_CODE, B.INVOICE_TITLE_CODE, B.INVOICE_SEND_ADDRRSS, B.MATERIAL_REQUEST_ITEM_ID, B.YEAR, B.DELETE_FLAG, B.PROVINCE_CODE, B.REASON, B.PARENT_ITEM_ID, B.FRAME_CONT_ITEM_ID, B.SUB_MATERIAL_REQUEST_ID, B.SUB_MATERIAL_REQUEST_CODE, B.MATERIAL_URL, B.RECOMMEND_PROVIDER_NAMES, C.PURCHASE_REQUEST_CODE, C.PURCHASE_REQUEST_NAME, C.APPLY_TYPE_CODE, C.CREATOR_NAME, C.APPLY_TELEPHONE, C.COMPANY_NAME, C.DEPT_NAME, B.CREATE_TIME, TO_CHAR( B.CREATE_TIME, 'YYYY-MM-DD' ) CREATE_TIME_STR, C.ARRIVE_TIME, C.IS_TO_END, C.MONEY_WAY_CODE, C.OWN, C.APPLY_CATEGORY_CODE, C.manu_Type, C.BILL_ID, MMD.MATERIAL_TYPE_CODE, B.BRANCH_COMPANY_DEAL_USER_ID, B.BRANCH_COMPANY_DEAL_USER_NAME, ( SELECT ORG_NAME FROM ORGANIZATIONS WHERE DELETE_FLAG = '0' AND ORG_CODE = ( SELECT PARENT_COMPANY_NO FROM ORGANIZATIONS WHERE ID = B.MATERIAL_DEPT_ID )) AS MATERIAL_COMPANY_NAME, B.ORIGINAL, B.PROVIDER_PRODUCT_MODEL, B.PROVIDER_PRODUCT_NAME, B.PRODUCT_DESC, B.Back_Flag, CASE WHEN MMD.material_type_code = 'WZ' THEN '1' WHEN MMD.material_type_code = 'FW' THEN '2' ELSE '3' END apply_category_code_item, NVL( C.IS_CARDSYSTEM_REQUEST, '0' ) IS_CARDSYSTEM_REQUEST, B.APPLY_GROUP_AUTHORITES, B.SCIENTIFIC_RESEARCH_ID, B.SCIENTIFIC_RESEARCH_CODE, B.SCIENTIFIC_RESEARCH_NAME, B.PREQUALFY_CODE, nvl( C.IS_QUICK, '0' ) AS IS_QUICK, C.PURCHASE_WAY_CODE, C.PURCHASE_TYPE_CODE PURCHASE_TYPE_CODE_P, C.ORIGINAL_TYPE, C.PURCHASE_REQUEST_BILLS_TYPE, B.IS_FRAME_CONT_MONAD FROM PURCHASE_REQUEST_ITEM B LEFT JOIN PURCHASE_REQUEST C ON B.PURCHASE_REQUEST_ID = C.ID LEFT JOIN MATERIAL_DATA MMD ON MMD.ID = B.MATERIAL_ID AND MMD.DELETE_FLAG = '0' WHERE B.delete_flag = '0' AND B.Item_Status IN ( 1 ) AND NOT EXISTS ( SELECT * FROM purchase_request_item_log pril WHERE B.id = pril.purchase_request_item_id AND pril.lock_status = '1' AND pril.delete_flag = '0' ) AND ( ( c.apply_type_code NOT IN ( '20', '41', '3' ) AND nvl( B.Apply_Num, 0 ) > nvl( B.Deal_Num, 0 )) OR c.apply_type_code IN ( '20', '41', '3' ) ) AND B.Deal_User_Id =: 1 AND C.MONEY_WAY_CODE =: 2 AND C.APPLY_TYPE_CODE =: 3 AND C.PAY_OUT_TYPE_CODE =: 4 AND C.APPLY_CATEGORY_CODE =: 5 AND NVL( C.IS_CARDSYSTEM_REQUEST, '0' ) = : 6 AND NOT EXISTS ( SELECT * FROM purchase_request_item p left join material_province mp ON p.material_id = mp.material_id WHERE p.delete_flag = 0 AND mp.delete_flag = 0 AND mp.material_status = 03 AND mp.org_code = p.province_code AND p.id = B.id ) ORDER BY C.ID, B.ID ASC)

2023-06-08 上传

import os from PyQt5.QtCore import Qt from PyQt5.QtGui import QPixmap, QIcon from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QHBoxLayout, QTreeView, QFileSystemModel class ImageViewer(QWidget): def init(self, folder_path): super().init() self.folder_path = folder_path self.image_dict = {} self.current_image = None self.setWindowTitle("Image Viewer") self.setFixedSize(1000, 600) self.image_label = QLabel(self) self.image_label.setAlignment(Qt.AlignCenter) self.tree_view = QTreeView() self.tree_view.setMinimumWidth(250) self.tree_view.setMaximumWidth(250) self.model = QFileSystemModel() self.model.setRootPath(folder_path) self.tree_view.setModel(self.model) self.tree_view.setRootIndex(self.model.index(folder_path)) self.tree_view.setHeaderHidden(True) self.tree_view.setColumnHidden(1, True) self.tree_view.setColumnHidden(2, True) self.tree_view.setColumnHidden(3, True) self.tree_view.doubleClicked.connect(self.tree_item_double_clicked) self.main_layout = QHBoxLayout(self) self.main_layout.addWidget(self.tree_view) self.main_layout.addWidget(self.image_label) self.load_images() self.update_image() def load_images(self): for file_name in os.listdir(self.folder_path): if file_name.lower().endswith((".jpg", ".jpeg", ".png", ".gif", ".bmp")): file_path = os.path.join(self.folder_path, file_name) self.image_dict[file_name] = file_path current_image = list(self.image_dict.keys())[0] def update_image(self): if self.current_image is not None: pixmap = QPixmap(self.image_dict[self.current_image]) self.image_label.setPixmap(pixmap.scaled(self.width() - self.tree_view.width(), self.height(), Qt.KeepAspectRatio, Qt.SmoothTransformation)) def tree_item_double_clicked(self, index): file_name = self.model.fileName(index) if file_name in self.image_dict: self.current_image = file_name self.update_image() def keyPressEvent(self, event): if event.key() == Qt.Key_A: self.previous_image() elif event.key() == Qt.Key_D: self.next_image() elif event.key() in [Qt.Key_1, Qt.Key_2, Qt.Key_3, Qt.Key_4, Qt.Key_5]: self.save_text_file(event.key() - Qt.Key_0) def previous_image(self): if self.current_image is not None: file_names = list(self.image_dict.keys()) current_index = file_names.index(self.current_image) if current_index > 0: self.current_image = file_names[current_index - 1] else: self.current_image = file_names[-1] self.update_image() def next_image(self): if self.current_image is not None: file_names = list(self.image_dict.keys()) current_index = file_names.index(self.current_image) if current_index < len(file_names) - 1: self.current_image = file_names[current_index + 1] else: self.current_image = file_names[0] self.update_image() def save_text_file(self, number): if self.current_image is not None: file_name = self.current_image txt_file_path = os.path.join(self.folder_path, os.path.splitext(file_name)[0] + ".txt") with open(txt_file_path, "w") as file: file.write(str(number)) if name == "main": import sys app = QApplication(sys.argv) viewer = ImageViewer("D:/图片/wallpaper") viewer.show() sys.exit(app.exec_())这份代码实现不了使用键盘的A键向上翻页以及D键向下翻页,也实现不了键盘数字键生成相应txt文档,帮我分析一下错在哪里

2023-06-07 上传

bool MoveObject::goObject() { //connet to the Server, 5s limit while (!move_base.waitForServer(ros::Duration(5.0))) { ROS_INFO("Waiting for move_base action server..."); } ROS_INFO("Connected to move base server"); /t the targetpose move_base_msgs::MoveBaseGoal goal; goal.target_pose.header.frame_id = "map"; goal.target_pose.header.stamp = ros::Time::now(); // goal.target_pose.pose.position.x = Obj_pose.pose.position.x; // goal.target_pose.pose.position.y = Obj_pose.pose.position.y; // target_odom_point.pose.pose.position.x=goal.target_pose.pose.position.x // target_odom_point.pose.pose.position.y=goal.target_pose.pose.position.y target_odom_point.pose.pose.position.x=Obj_pose.pose.position.x; target_odom_point.pose.pose.position.y=Obj_pose.pose.position.y; cout << goal.target_pose.pose.position.x << endl; cout << goal.target_pose.pose.position.y << endl; //goal.target_pose.pose.orientation = tf::createQuaternionMsgFromYaw(g.response.yaw); goal.target_pose.pose.orientation.z = 0.0; goal.target_pose.pose.orientation.w = 1.0; tf::quaternionMsgToTF(target_odom_point.pose.orientation, quat); tf::Matrix3x3(quat).getRPY(roll, pitch, yaw);//进行转换 yaw +=1.5708;//旋转90 target_odom_point.pose.position.x -=keep_distance*cos(yaw); target_odom_point.pose.position.y -=keep_distance*sin(yaw); goal.target_pose.pose.position.x=target_odom_point.pose.pose.position.x goal.target_pose.pose.position.y=target_odom_point.pose.pose.position.y target_odom_point.pose.orientation = tf::createQuaternionMsgFromYaw(yaw); ROS_INFO("Sending goal"); move_base.sendGoal(goal); move_base.waitForResult(); if (move_base.getState() == actionlib::SimpleClientGoalState::SUCCEEDED) { ROS_INFO("Goal succeeded!"); return true; } else { ROS_INFO("Goal failed"); return false; } }

2023-05-25 上传