从JavaScript回调Selenium

从JavaScript回调Selenium,javascript,python,selenium,Javascript,Python,Selenium,假设我有以下(假)JavaScript代码: asynchronousOperation.addEventListener(“已完成”, 功能(事件){ 如果(event.property==“required value”)告诉Selenium我们很好; 否则告诉Selenium测试失败; }); asynchronousOperation.run(); 我正在使用Python编写测试,但如果代码是用其他语言编写的,我想我会找到一种方法来调整代码 到目前为止,我能做的最好的事情就是把结果写在

假设我有以下(假)JavaScript代码:

asynchronousOperation.addEventListener(“已完成”,
功能(事件){
如果(event.property==“required value”)告诉Selenium我们很好;
否则告诉Selenium测试失败;
});
asynchronousOperation.run();
我正在使用Python编写测试,但如果代码是用其他语言编写的,我想我会找到一种方法来调整代码


到目前为止,我能做的最好的事情就是把结果写在页面的某个地方,然后用定时器检查那个地方。但这听起来似乎可以做得更好。

你走的正是正确的道路。Adam Goucher将这种机制称为“JavaScript锁存器”,它正是您想要使用的构造。通常,您希望将其与
WebDriverWait
构造一起使用,这在大多数语言绑定(包括Python)中都应该可用
WebDriverWait
建立超时,但轮询所需的条件,在满足条件或达到超时时立即返回。在本例中,条件将是页面上具有适当值的JavaScript变量。

您的思路完全正确。Adam Goucher将这种机制称为“JavaScript锁存器”,它正是您想要使用的构造。@JimEvans这种方法的问题是,我需要估计测试必须终止的时间。虽然大多数时候我不想永远等待测试结束,但我也可能会变得贪婪,设置很短的超时。。。然后,测试将随机失败,这取决于服务器负载等等……这就是为什么要使用
WebDriverWait
构造,它应该在大多数语言绑定(包括Python)中可用。这会建立一个超时,但会轮询所需的条件,在满足条件或达到超时时立即返回。在这种情况下,条件将是页面上具有适当值的JavaScript变量。@JimEvans谢谢,如果您想回答这个问题,我会接受它。在文档中找到这一页:这基本上给出了我想要的示例,感谢您提到WebDriverWait。制作成一个答案。谢谢