0

我正在写一个机器人的web客户端与chromedriver。 在某个网页中,根据我是否在服务中运行测试,我得到了不同的结果。我想点击一个iframe内的按钮,这样的代码:ChromeDriver得到错误的按钮位置,所以点击它将失败

webdriver.SwitchTo().Frame(iframe); 

var element = webdriver.FindElement(By.Id("Button1")); 
element.Click(); 

如果我运行的集成服务器(巡航控制)测试。

按钮位置属性是930,-14(和大小是31,21)。

点击次数以下消息失败:

Element is not clickable at point (945, -4)

如果我运行在桌面应用程序(的WinForms)

为16621(宽度和高度被报告为位置被正确地计算出的测试85,20)。

该按钮可以被点击。

问题

如何继续?我寻找一种方法来接近发现会发生什么。

+0

我混合了按钮,关闭问题。 –

回答

0

我曾经在Chrome中遇到这个问题很多次,对我来说,解决方法是使用javascript的scrollIntoView将可见视口移动到该元素。

有两个原因,为什么你会得到一个“元素不可见”的错误:

  1. 的元素是不是浏览器窗口 硒已开通的可视范围之内;
  2. 元素通过CSS隐藏(它是根据另一个元素,或者有它的可见性设置为false)

使用scrollIntoView将总是覆盖第一的那些可能出现的问题。无论页面视图的宽度或高度如何,scrollIntoView都会根据其ID来查找元素,并将可见浏览器区域移至该元素。本质上它使用滚动条模拟,直到它可以在屏幕上物理地看到该元素。

第二个问题当然是造型的问题,但你也可以操作与原始的JavaScript(在其上设置CSS属性等)

未测试元素,但这应该工作:

WebDriver.executeScript(
    'var elm = document.getElementById("Button1");elm.scrollIntoView(true);' 
); 
// Continue to access element: WebDriver.By.Id("Button1").Click(); 
// You could also click the element through javascript: 
// Example: 
// var elm = document.getElementById("Button1");elm.scrollIntoView(true);elm.click(); 
// if doing the above make sure you remove the WebDriver.click()l line. 

使用此功能还将涵盖您在不同平台上以不同屏幕尺寸测试镀铬的情况。无论屏幕大小如何,在与元素交互之前使用scrollIntoView将始终提供一致的结果。我发现硒测试片最好,铬有时如此之快,它会导致不一致的结果。在每次交互之前这样做可能是我为使硒测试更可靠而做出的最大单一改变。

上scrollIntoView一些更多的信息:https://developer.mozilla.org/en/docs/Web/API/Element/scrollIntoView

+0

但是按钮位置完全错误。如果按钮位置更靠后,铬金属驱动器难以获得按钮的位置吗? –

+0

即使我使用'IJavaScriptExecutor',我添加了一个scrollIntoView行,但点击失败的方式与报告的按钮位置相同。 –

+0

按钮位置错误是造型问题,不是吗?从chromedriver/selenium的角度来看,它的位置并不重要:scrollIntoView将始终导航到它所在的位置,就像元素ID一样。如果点击失败后,尝试在原始JavaScript中做到这一点:我会改变上面的答案也这样做。 –

1

一般错误消息

Element is not clickable at point (x, y)

文本像其他元素结束将获得点击,然后继续登录该元素的HTML是会收到点击。在DOM中查找该元素。很多时候,这是一些动态的HTML,没有加载完成,也许是一个没有完全解散的对话框等等。尝试使用WebDriverWaitExpectedConditions等待元素不可见。

还要确保在上一页中没有id = button1,如果页面正在过渡或缓慢加载,可能会被拾取。在新页面上查找之前,您可能需要等待元素过时(以确保页面转换已启动)。

+0

异常消息不会像您所描述的那样结束。该按钮在那里,因为否则我将无法使用其属性检索其位置和大小。之前没有其他页面,因为点击位于一个序列的中间,前一个是对'

+0

我混淆了按钮,关闭了问题。 –