我有一个脚本按顺序创建以下几对工作表:
WorkSheet (holds data) -> ChartSheet using WorkSheet
Run Code Online (Sandbox Code Playgroud)
脚本完成后,我留下了如此订购的工作表:
Data1, Chart1, Data2, Chart2, Data3, Chart3, ...
Run Code Online (Sandbox Code Playgroud)
是否可以在脚本末尾(即之前workbook.close())重新排序工作表,以在最终的.xlsx文件中获取以下工作表顺序?
Chart1, Chart2, Chart3,...,ChartN, Data1, Data2, Data3,...
Run Code Online (Sandbox Code Playgroud) 我想知道Scrapy是否有基于CSS中定义的颜色来刮取数据的方法.例如,选择所有元素background-color: #ff0000.
我试过这个:
response.css('td::attr(background-color)').extract()
Run Code Online (Sandbox Code Playgroud)
我期待一个列表,其中包含为表数据元素设置的所有背景颜色,但它返回一个空列表.
通常可以通过Scrapy中的CSS属性定位元素吗?
我对Scrapy的体验是有限的,每次我使用它时,它总是通过终端的命令.如何从我的django模板中获取我的表单数据(要删除的URL)以与scrapy进行通信以开始进行刮擦?到目前为止,我只想到从django的视图中获取表单的返回数据,然后尝试进入scrapy目录中的spider.py,将表单数据的url添加到spider的start_urls中.从那里开始,我真的不知道如何触发实际的爬行,因为我习惯于通过我的终端使用"scrapy crawl dmoz"等命令严格执行此操作.谢谢.
微小的编辑:刚刚发现了scrapyd ...我想我可能正朝着正确的方向前进.
我能够验证一个元素是否存在以及它是否显示,但似乎无法找到一种方法来查看它是否是"可点击的"(不是在谈论禁用).
问题是,当填充webform时,我想要的元素在加载时可能会叠加div.div本身很难被发现,因为它的id,名称甚至css都很灵活.因此,我试图检测输入字段是否可以"点击"或"填充".当存在重叠div时,该字段不能由普通用户填充(因为div将覆盖输入字段而不允许用户填充它),但它可以由selenium填充.我想防止这种情况,只有当用户也可以填充它时才允许硒填充它.
问题:
我们一直在使用nose测试运行器.
我不时会看到我们的测试有eq_()电话:
eq_(actual, expected)
Run Code Online (Sandbox Code Playgroud)
而不是共同的:
self.assertEqual(actual, expected)
Run Code Online (Sandbox Code Playgroud)
问题:
nose.tools.eq_与标准的单元测试框架相比,使用是否有任何好处assertEqual()?它们实际上相当吗?
思考:
好吧,对于一个,eq_更短,但必须从中导入nose.tools,使得测试依赖于测试运行器库,这可能使得更难以切换到不同的测试运行器,比如说py.test.在另一方面,我们也用@istest,@nottest以及@attr鼻子装饰了很多.
q库有这个简洁的功能来解析和传播多个promises到单独的参数:
如果你有一个数组的承诺,你可以使用spread作为替代.扩展函数将值"扩展"到履行处理程序的参数上.
return getUsername()
.then(function (username) {
return [username, getUser(username)];
})
.spread(function (username, user) {
});
Run Code Online (Sandbox Code Playgroud)
在量角器中,我们正在尝试使用内置的protractor.promise来自WebDriverJS.
问题:
是否可以使用"传播"功能protractor.promise?
用例示例:
我们已经实现了一个自定义的jasmine matcher来检查元素是否被聚焦.在这里,我们需要在进行相等比较之前解决两个promise.目前,我们正在使用protractor.promise.all()和then():
protractor.promise.all([
elm.getId(),
browser.driver.switchTo().activeElement().getId()
]).then(function (values) {
jasmine.matchersUtil.equals(values[0], values[1]);
});
Run Code Online (Sandbox Code Playgroud)
理想情况下,我们希望处于更易读的状态:
protractor.promise.all([
elm.getId(),
browser.driver.switchTo().activeElement().getId()
]).spread(function (currentElementID, activeElementID) {
return jasmine.matchersUtil.equals(currentElementID, activeElementID);
})
Run Code Online (Sandbox Code Playgroud) 我最近发现了一个很棒的ng-describe软件包,它通过抽象掉你必须记住/查找和编写的所有样板代码来加载,注入,模拟或间谍,从而使AngularJS应用程序的单元测试非常透明.
有人试过ng-describe用protractor吗?它是否有意义,我们可以从中受益吗?
引起我注意的一件事是你可以轻松地模拟HTTP响应:
ngDescribe({
inject: '$http', // for making test calls
http: {
get: {
'/my/url': 42, // status 200, data 42
'/my/other/url': [202, 42], // status 202, data 42,
'/my/smart/url': function (method, url, data, headers) {
return [500, 'something is wrong'];
} // status 500, data "something is wrong"
},
post: {
// same format as GET
}
},
tests: function (deps) {
it('responds', function (done) {
deps.$http.get('/my/other/url')
.then(function (response) {
// response.status …Run Code Online (Sandbox Code Playgroud) 问题:
在我们相当大的测试代码库中,我们使用不同的键盘快捷键.例如,复制我们正在使用的选定文本CTRL/COMMAND + C,粘贴CTRL/COMMAND + v,打开新选项卡CTRL/COMMAND + T等.
为了使测试在多个平台上运行,我们希望根据目标浏览器运行的平台自动进行CTRLvs COMMAND选择.为了确定目标平台,我们目前正在使用以下帮助函数navigator.appVersion:
this.getControlKey = function () {
return browser.executeScript("return navigator.appVersion.indexOf('Mac');").then(function (isMac) {
return isMac ? protractor.Key.COMMAND : protractor.Key.CONTROL;
});
};
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是getControlKey()返回一个承诺,每次我们使用它时,我们必须明确地解决承诺:
helpers.getControlKey().then(function (controlKey) {
elm.sendKeys(protractor.Key.chord(controlKey, "c"));
});
Run Code Online (Sandbox Code Playgroud)
问题:
是否有可能避免嵌套并简化使用getControlKey()?理想情况下,我希望它的工作简单:
elm.sendKeys(protractor.Key.chord(helpers.getControlKey(), "c"));
Run Code Online (Sandbox Code Playgroud)是使用navigator.appVersion最好的方法来确定目标平台,还有更好的方法吗?
javascript selenium end-to-end selenium-webdriver protractor
故事:
我们有一个相当庞大的端到端量角器测试代码库.我们有两个配置 - 一个是"本地" - 在Chrome和Firefox中运行测试,directConnect另一个是"远程" - 在远程selenium服务器上运行测试 - 在我们的案例中是BrowserStack.
我们的"本地"配置配置为在Chrome中运行一些测试,在Firefox中运行一些测试 - 因为我们实际上无法在Chrome中运行某些测试 - 例如,键盘快捷键在Chrome + Mac中不起作用.在解决链接chromedriver问题之前,运行需要在Firefox中使用键盘快捷键的测试是一种解决方法.
以下是配置的相关部分:
var firefox_only_specs = [
"../specs/some_spec1.js",
"../specs/some_spec2.js",
"../specs/some_spec3.js"
];
exports.config = {
directConnect: true,
multiCapabilities: [
{
browserName: "chrome",
chromeOptions: {
args: ["incognito", "disable-extensions", "start-maximized"]
},
specs: [
"../specs/**/*.spec.js",
"../specs/**/**/*.spec.js",
"../specs/**/**/**/*.spec.js"
],
exclude: firefox_only_specs
},
{
browserName: "firefox",
specs: firefox_only_specs
}
],
// ...
};
Run Code Online (Sandbox Code Playgroud)
问题:
现在,问题是,如果我正在调试单个测试,或者想要运行单个测试 - 我标记它是专注的(通过fdescribe/ fit) - 但是量角器启动两个驱动程序会话 - 一个用于Chrome和另一个一个用于Firefox,使用两种配置功能: …
unittest包新手.我正在尝试通过以下代码验证函数返回的DataFrame.即使我将输入硬编码assert_frame_equal为等于(pd.DataFrame([0,0,0,0])),单位测试仍然失败.有人想解释它为什么会发生吗?
import unittest
from pandas.util.testing import assert_frame_equal
class TestSplitWeight(unittest.TestCase):
def test_allZero(self):
#splitWeight(pd.DataFrame([0,0,0,0]),10)
self.assert_frame_equal(pd.DataFrame([0,0,0,0]),pd.DataFrame([0,0,0,0]))
suite = unittest.TestLoader().loadTestsFromTestCase(TestSplitWeight)
unittest.TextTestRunner(verbosity=2).run(suite)
Run Code Online (Sandbox Code Playgroud)
Error: AttributeError: 'TestSplitWeight' object has no attribute 'assert_frame_equal'
python ×6
javascript ×4
protractor ×4
selenium ×3
testing ×3
angularjs ×2
html ×2
scrapy ×2
assertion ×1
css ×1
django ×1
end-to-end ×1
excel ×1
jasmine ×1
ngdescribe ×1
nose ×1
pandas ×1
promise ×1
unit-testing ×1
web-scraping ×1
xlsxwriter ×1