我有一个 python 类:
from robot.api import logger
class TestClass(object):
def __init__(self, arg1, arg2):
self.arg1 = arg1
self.arg2 = arg2
logger.info('initialized', also_console=True)
def print_arg1(self):
print self.arg1
def print_arg2(self):
print self.arg2
Run Code Online (Sandbox Code Playgroud)
我写了一个名为“CommonKeywords.robot”的关键字文件:
*** Settings ***
Library ../Libs/TestClass.py arg1 arg2 WITH NAME class1
*** Keywords ***
print arg1 class1
class1.print_arg1
print arg2 class1
class1.print_arg2
Run Code Online (Sandbox Code Playgroud)
我的场景文件是“scenario.robot”:
*** Settings ***
Resource ../Keywords/CommonKeywords.robot
*** Test Cases ***
Test Prints
print arg1 class1
Run Code Online (Sandbox Code Playgroud)
这是我的项目结构:
Test
---- Keywords
---- CommonKeywords.robot
---- Scenarios
---- scenario.robot
---- Libs
---- TestClass.py …Run Code Online (Sandbox Code Playgroud) 我正在尝试在机器人框架中编写一个测试用例,以从网站自动下载一个 excel 文件。我想使用机器人脚本为我的浏览器设置首选项,以便在我想要的目标目录中自动下载文件,而无需询问我!
我已经尝试过这个解决方案;但它没有用。
我还尝试设置一个现有的 Firefox 配置文件,因为这说明它工作正常,但我希望能够自动调整首选项。
任何的想法?
正如@Sachin 所说,我编写了一个 python 脚本来设置 FireFox 的首选项:
from selenium import webdriver
class WebElement(object):
@staticmethod
def create_ff_profile(path):
fp = webdriver.FirefoxProfile()
fp.set_preference("browser.download.folderList", 2)
fp.set_preference("browser.download.manager.showWhenStarting", False)
fp.set_preference("browser.download.dir", path)
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", 'application/csv')
fp.update_preferences()
return fp
Run Code Online (Sandbox Code Playgroud)
并在机器人场景中使用它:
*** Settings ***
Library Selenium2Library
Library Selenium2LibraryExtensions
Library OperatingSystem
Library ../../../Libraries/WebElement.py
*** Variables ***
${profileAddress} C:\\Users\\user\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\VdtJKHal.default
${destinationUrl} http://www.principlesofeconometrics.com/excel.htm
${browserType} firefox
${downloadDir} C:\\Users\\user\\Desktop
${acceptedTypes} text/csv/xls/xlsx
${itemXpath} //*[text()="airline"]
*** Test Cases ***
My Test Method
log to console Going to …Run Code Online (Sandbox Code Playgroud) 我sys.stdout.write在Windows 10 64位操作系统的控制台中写了一个简单的语句。
Microsoft Windows [Version 10.0.17134.590]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Users\user>python
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.stdout.write('x')
x1
>>> sys.stdout.write('try')
try3
>>> sys.stdout.write('fooo')
fooo4
Run Code Online (Sandbox Code Playgroud)
安装的Python版本是3.7.2。
我在 python 中有一个简单的 web 服务器,它根据一些配置响应请求。配置定义的百分比OK,NOK,Timeout和Null响应:
import socket
import sys
import os
import datetime
import random
import time
# define globals
global log_file
global configs
dash = '-'
sep = '\n' + 100 * dash + '\n'
ok_message = 'HTTP/1.0 200 OK\n\n'
nok_message = 'HTTP/1.0 404 NotFound\n\n'
def initialize():
if not os.path.isdir('./logs'):
os.mkdir(os.path.abspath('./logs'))
path = os.path.abspath(os.path.join(os.path.abspath('./logs'),
datetime.datetime.now().strftime('%d-%m-%Y %H-%M-%S')))
os.mkdir(path)
log_file = open(os.path.join(path, 'received_packets.log'), 'a')
def finalize():
log_file.close()
def select_resp_type():
percents = {}
for …Run Code Online (Sandbox Code Playgroud) 我在机器人框架中有一个关键字; 它需要一个参数,对它执行一些处理并返回它:
My Keyword Name
[Arguments] ${arg}
# Some process on ${arg}
[Return] ${arg}
Run Code Online (Sandbox Code Playgroud)
所以这将是用法:
${x} = My Keyword Name ${x}
Run Code Online (Sandbox Code Playgroud)
这意味着我给了${x}关键字的旧值,它返回了它的新值.
我希望通过引用进行调用My Keyword Name,因此我不需要使用赋值来设置新值${x}.我已阅读内置的和UserGuide,但没有关于这个主题行.谁可以帮我这个事?
我试图作为安装python3-psycopg2的一部分进行postgresql安装,但我得到:
The following packages have unmet dependencies:
python3-psycopg2 : Depends: python3 (>= 3.7~) but 3.6.7-1~18.04 is to be installed
E: Unable to correct problems, you have held broken packages.
Run Code Online (Sandbox Code Playgroud)
我安装python3.8并配置python3了它的链接:
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
Run Code Online (Sandbox Code Playgroud)
但我仍然得到同样的错误。
我有一个Ubuntu 18.04操作系统。
我有一个python脚本,它试图自动下载excel文件.我试图直接解决firefox配置文件,它工作正常:
path = '\\path\\to\\firefox\\default\\profile\\'
fp = webdriver.FirefoxProfile(path)
driver = webdriver.Firefox(firefox_profile=fp)
driver.maximize_window()
driver.get('url')
driver.find_element_by_id('downloadButton').click()
time.sleep(5)
driver.close()
Run Code Online (Sandbox Code Playgroud)
但是当我尝试以编程方式设置配置文件时,它不起作用; 还有下载弹出窗口:
fp = webdriver.FirefoxProfile()
fp.set_preference('browser.download.folderList', 2)
fp.set_preference('browser.download.manager.showWhenStarting', False)
fp.set_preference('browser.download.dir', os.getcwd())
fp.set_preference('browser.helperApps.neverAsk.saveToDisk', 'text/csv/xls/xlsx')
driver = webdriver.Firefox(firefox_profile=fp)
driver.maximize_window()
driver.get('url')
driver.find_element_by_id('downloadButton').click()
time.sleep(5)
driver.close()
Run Code Online (Sandbox Code Playgroud)
我也改了行fp.set_preference('browser.helperApps.neverAsk.saveToDisk', 'text/csv/xls/xlsx')到fp.set_preference('browser.helperApps.neverAsk.saveToDisk', ('application/vnd.ms-excel')); 但没有变化.
知道我错了什么吗?
编辑1:
我试过了
fp.set_preference('browser.helperApps.neverAsk.saveToDisk', "text/plain, application/vnd.ms-excel, text/csv, text/comma-separated-values, application/octet-stream")
Run Code Online (Sandbox Code Playgroud)
和
fp.set_preference('browser.helperApps.neverAsk.saveToDisk', "text/plain, application/vnd.ms-excel, text/csv, text/comma-separated-values, application/octet-stream, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
Run Code Online (Sandbox Code Playgroud)
结果没有变化.
我有这个代码:
Test Check For Loop
@{ret_val} = Read Data From Excel ${filename} ${sheetname}
log to console ${ret_val}
:FOR ${item} IN ${ret_val}
\ log to console ${item}
Run Code Online (Sandbox Code Playgroud)
Read Data From Excel是我开发的其他关键词之一,它工作正常; 但我得到了这个输出:
Test Check For Loop [{'key1': 'val1', 'key2': 'val2'}]
[{'key1': 'val1', 'key2': 'val2'}]
| PASS |
------------------------------------------------------------------------------
Scenario.scenario | PASS |
0 critical tests, 0 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
Scenario | PASS |
0 critical tests, 0 passed, 0 failed
1 test …Run Code Online (Sandbox Code Playgroud) 我已经使用kafka-python库编写了一个 python 脚本,它将消息写入和读取到kafka. 我写消息没有任何问题;kafka我可以使用控制台工具检索它们。但我无法使用我的 python 脚本读取它们。我的消费者有一个 for ,它冻结在迭代的第一行并且永远不会返回。这是我的代码:
from kafka import KafkaConsumer
consumer = KafkaConsumer(
"my-topic",
bootstrap_servers="localhost:9092"),
value_deserializer=lambda v: json.dumps(v).encode("utf-8")
)
for msg in consumer:
print(type(msg))
Run Code Online (Sandbox Code Playgroud)
消费者被创建并完全订阅;我可以看到它my-topic列在其属性的主题列表中_client。
任何想法?
python ×6
apache-kafka ×1
cmd ×1
download ×1
firefox ×1
for-loop ×1
import ×1
kafka-python ×1
psycopg2 ×1
python-3.7 ×1
python-3.x ×1
selenium ×1
stdout ×1
webdriver ×1
webserver ×1