我在Katalon Studio中有一个按钮点击命令,我使用scrollIntoView将按钮带入视图,然后单击按钮。
import numpy as np
import pandas as pd
import scipy
import pylab
import matplotlib
import matplotlib.pyplot as plt
import math
import sympy as sp
from scipy.optimize import curve_fit
x = np.array([600,650,700,750,800,850,900,950,1000])
y = np.array([.124,.627,2.492,8.187,23.06,57.24,127.9,261.6,496.5])
lny = np.log(y)
plt.plot(x,lny,'.')
plt.show()
def func(x,a,b,c):
return a+b/x+c*np.log(x)
popt, pcov = curve_fit(func,x,lny)
print popt
a,b,c = (popt)
print a
print b
print c
stdvfunc = np.std(func(x,a,b,c))
print stdvfunc
在执行时使用Chrome,代码在Windows计算机上运行正常,但在Mac计算机上,我在大约40%的时间内收到以下错误:
((JavascriptExecutor) functiondriver).executeScript("arguments[0].scrollIntoView({block: \"nearest\"});", buttonelement);
WebUI.delay(4)
WebUI.click(findTestObject('object/path'))
我环顾网络寻找解决方案并试图通过添加您在上面看到的延迟来解决这个问题,但这不起作用。此外,当自动化运行时查看浏览器时,我可以直观地看到应该单击的按钮 - 因此它不像按钮没有加载。有没有其他方法可以编写此代码,以便它更一致地工作?
更新:我已经尝试了在这个答案和相关问题中提出的更智能的等待功能,但都没有奏效。我想强调的是,这个问题只发生在Mac机器上,而不是Windows机器上;这就是使这个问题与其他类似问题不同的原因。
我确实做了一个发现。通过Katalon Studio运行脚本时,Chrome默认情况下不会最大化窗口。但是,我做了一个实验,我强迫浏览器最大化,这解决了问题。因此,当浏览器不是全屏时,似乎Katalon Studio在Mac上设置x,y坐标时遇到问题。这是我的安装上的某种校准问题,还是Mac机器上的WebUI的已知行为?
答案 0 :(得分:1)
延迟是自动化的一个重要部分,有时按钮似乎在那里,但是在与它进行交互的那个时刻,它可能还没有准备好。这段时间通常非常小,太快,无法用眼睛看。
WebUI有一系列帮助程序,用于执行等待元素满足某些条件的动态等待,而不是总是等待X秒。
Instead of WebUI.delay(4)
你可以尝试类似的东西:
WebUI.waitForElementClickable(findTestObject('object/path'))
如果问题确实是在页面准备好让你点击按钮之前它试图进行过快的交互,那么这将强制延迟一直持续到Selenium确定该按钮处于允许的状态你点击它。
答案 1 :(得分:1)
我终于找到了这个问题。 Mac会添加一个悬停在页面内容上的滚动条。除非你将鼠标悬停在它上面使用它,否则它是不可见的。在我的情况下,当使用滚动到视图时我使用“最近”,有时(但不总是)导致按钮位于页面的最底部。在这种情况下,水平滚动条悬停在按钮上。这就是为什么当我最大化窗口时问题消失的原因,以及为什么在Windows机器上不会出现问题。我通过将scrollIntoView脚本更改为:
来解决了这个问题scrollIntoView({block: \"center\"}