我想知道如何在Javascript中从div到窗口顶部获取像素量(或一般测量值).我不是在寻找与文档相关的偏移y,只是在浏览器显示的顶部.我在这里尝试了"已解答"的解决方案:是否可以在浏览器视口中获取div的位置?不在文件中.在窗口内,但至少在Safari中,我遇到了一个问题,无论div到底在哪里都返回相同的数字.
谢谢你的帮助!
第一次海报.我已经在UI自动化领域工作了很多年,但最近才引入/指示使用Page Object Model.其中大部分是常识,包括我已经使用的技术,但有一个特别好的点我无法在自己的脑海中证明,尽管广泛搜索了一个合理的解释.我希望这里有人可以启发我,因为这个问题引起了一些惊愕,因为我试图将POM与我自己的最佳实践相结合.
来自http://code.google.com/p/selenium/wiki/PageObjects:
上面给出的代码显示了一个重要的观点:测试而不是PageObjects应该负责对页面状态进行断言....当然,正如每个指南都有例外......
来自http://seleniumhq.org/docs/06_test_design_considerations.html#chapter06-reference:
在如何设计页面对象方面有很多灵活性,但是有一些基本规则可以获得测试代码所需的可维护性.页面对象本身永远不应该进行验证或断言.这是测试的一部分,应该始终在测试代码中,而不是在页面对象中.页面对象将包含页面的表示形式,以及页面通过方法提供的服务,但是没有与正在测试的内容相关的代码应该在页面对象中.
有一个单一的验证可以而且应该在页面对象中,即验证页面以及页面上可能的关键元素是否已正确加载.应在实例化页面对象时完成此验证.
这两个"指南"都允许潜在的例外,但我对基本前提不能不同意.我习惯于在"页面方法"中进行大量的验证,我认为验证的存在是一种强大的技术,可以在各种环境中查找问题(即每次调用方法时都会进行验证)而不仅仅发生在特定测试的有限环境中.
例如,让我们想象一下,当您登录AUT时,会出现一些文本"以USER身份登录".有一个测试专门验证这个是合适的,但为什么不想在每次调用登录时验证它?这个工件与页面"是否正确加载"没有直接关系,并且它与"正在测试的内容"无关,因此根据上面的POM指南,它显然不应该是页面方法. ..但在我看来,它显然应该存在,通过尽可能经常地验证重要的工件来最大化自动化的力量,尽可能少的事先考虑.将验证码放入页面方法可以增加自动化的功能,允许您"免费"获得大量验证,而不必在测试中担心,并且在不同的环境中进行频繁验证通常会发现您不会发现的问题如果验证仅限于对该工件的单个测试.
换句话说,我倾向于区分特定于测试的验证和"一般"验证,并且我认为后者被广泛地包含在页面方法中是完全合适/可取的.这促进了更薄的测试和更厚的页面对象,这通常通过重用更多代码来提高测试可维护性 - 尽管这些指南中存在相反的争用.我错过了这一点吗?不希望在页面方法中进行验证的真正原理是什么?我所描述的情况实际上是这些指南中描述的"例外"之一,因此实际上与POM不一致吗?提前感谢您的想法.-jn-
我正在构建 github 操作管道,我想在我的作业中添加自动重试,类似于retry 关键字在 gitlab 中的工作方式,失败时将再次运行完整步骤。github actions 中有什么允许这样做的吗?
这是我正在使用的一个示例作业:
jobs:
env-check:
runs-on: ubuntu-latest
container:
image: myimage
steps:
- uses: actions/checkout@v2
- name: env-check
run: |
echo "foobar"
Run Code Online (Sandbox Code Playgroud) 我正在尝试为平静的页面制作过滤器.
我有一个名为Companies的页面,还有一个用于打开另一个页面的按钮,CompanyUsers,来自该公司的用户.
它已经打开了新页面,但它给了我所有用户,我想按照我点击的行进行过滤.
我尝试更改CompanyUsers的Controller添加参数,但在此之后我不知道如何在CompanyUsers中设置过滤器.
我的Onclick在CompaniesGrid.ts
protected onClick(e: JQueryEventObject, row: number, cell: number): void {
super.onClick(e, row, cell);
let item = this.itemAt(row);
if ($(e.target).hasClass('usuario-row')) {
window.location.href = '/Cadastros/EmpresasUsuarios?empresaId=' + item.EmpresaId;
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能平静地做到这一点?有一个简单的方法吗?
谢谢!!
想象一个 TypeScript (4.2.2) 函数接收 astring
或 aPromise<string>
并使用最初接收到的相同类型返回答案,例如:
function trim(textOrPromise) {\n if (textOrPromise.then) {\n return textOrPromise.then(value => result.trim());\n }\n return textOrPromise.trim();\n}\n
Run Code Online (Sandbox Code Playgroud)\n我想使用泛型定义此类函数的签名,以指示传入 aPromise
始终会导致 a Promise
,传入 astring
会导致 astring
为此,我定义了以下重载:
\nfunction trim(text: Promise<string>): Promise<string>\nfunction trim(text: string): string\nfunction trim(text: any): any {\n if (text.then) {\n return text.then(result => result.trim()); // returns Promise<string>\n }\n return text.trim(); // returns string\n}\n
Run Code Online (Sandbox Code Playgroud)\n只要参数显式定义为string
或 a ,就会正确转换Promise<string>
:
let value: string\ntrim(value) // …
Run Code Online (Sandbox Code Playgroud) 假设我们有一个包含以下 JS 代码的文件:
process.nextTick(()=>{
console.log('nextTick')
})
queueMicrotask(()=>{
console.log('queueMicrotask')
})
console.log('console.log')
Run Code Online (Sandbox Code Playgroud)
我们已经"type": "commonjs"
在 package.json 中设置了模块系统
我们期望控制台输出什么?Node.js 官方文档说:
在 Node.js 事件循环的每一轮中,process.nextTick() 队列始终在微任务队列之前处理
所以,在控制台中我们期望
console.log
nextTick
queueMicrotask
Run Code Online (Sandbox Code Playgroud)
那行得通。直到我将模块系统更改为"type": "module"
. 在那次更改之后,我不断地在 process.nextTick 之前执行queueMicrotask。控制台输出为:
console.log
queueMicrotask
nextTick
Run Code Online (Sandbox Code Playgroud)
有人能解释这种行为吗?我假设这种行为在某种程度上与模块评估和执行过程有关,并且 nextTick queueMicrotask 以某种方式进入不同的事件循环滴答,因为模块意味着异步执行(在浏览器中)。尽管如此,这种猜测还是非常不稳定,从我的角度来看,这是不合逻辑的。尽管如此,我仍然没有一个合理的解释。
我试图在我的工作场所用Restassured来展示宁静,并告诉他们与使用jasmine.js相比,它是多么棒和容易使用我怎么会在基本测试中遇到一些问题我试图做我的测试说
Given we have valid credentials for the client using this test
When we try to serach for a medicine '<medicine>'
Then we get a valid '<perfLabel>' response with search results
|medicine|perflabel|
|Salbutamol|perflabel1|
|Panadol|perflabel2|
|Salbutamol (GA)|perflabel3|
Run Code Online (Sandbox Code Playgroud)
当我进入下一步
@When("we try to serach for a medicine '(.*)' ")
public void tryToSearchUsingEquals(String medicine)
{
tsApiActions.requestServiceSearchWhichEquals(medicine);
}
In my Step method
@Step
public void requestServiceSearchWhichEquals(String medicine)
{
host = "http://www.int.abc.com.au/api/cs/v1/terminology-service/trade-product/search-summary?offset=0&limit=20&prefLabel=eq "+medicine+"&sort=prefLabel DESC&cache=false";
requestSend(host);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是
任何帮助非常感谢谢谢
javascript ×2
typescript ×2
browser ×1
c# ×1
commonjs ×1
es6-modules ×1
event-loop ×1
github ×1
html ×1
java ×1
node.js ×1
pageobjects ×1
pixel ×1
rest ×1
ruby ×1
selenium ×1
serenity-bdd ×1
webdriver ×1