我正在使用C#和Selenium处理一些自动化脚本,在IE11上运行我的测试。我试图使用WebElement中的.Click()函数单击一个链接,它根本不起作用,所以我尝试使用.SendKeys(Keys.Enter)函数,它起作用了。
我试图理解这种行为,但我无法弄清楚为什么会发生这种情况。 有谁知道使用.Click()和.SendKeys(Keys.Enter)?
之间的区别答案 0 :(得分:2)
Click()
...如果这导致加载新页面,此方法将尝试阻止,直到页面加载完毕。此时,您应该放弃对此元素的所有引用,并且对此元素执行的任何进一步操作都将抛出StaleElementReferenceException ...
...点击元素有一些先决条件。元素必须是可见的,其高度和宽度必须大于0。
SendKeys()
使用此方法模拟键入元素,可以设置其值。
两者都模拟web元素上的用户操作。但是SendKeys()
试图在不考虑其他任何事情的情况下执行操作Click()
有一些安全防范,例如"停止"代码从继续直到收到页面加载事件。此外,该方法不会尝试执行而不满足一些先决条件以避免意外行为。
答案 1 :(得分:0)
调用.SendKeys(Keys.Enter)不是编写测试用例的现实方法,因为在大多数情况下人类用户无法这样做,即使他是,他通常也会更喜欢点击
因此,您应该尝试更改.Click()的定位器。当涉及可点击元素时,MSIE有时会有点挑剔。例如,我有一个这样的HTML代码段:
<button type="button" onclick="executeSomeJavaScript()">
<span>
<span>Abmelden</span>
</span>
</button>
当我试图打电话时
driver.FindElement(By.XPath("//span[.='Abmelden']").Click();
它在MSIE中不起作用。将定位器更改为
之后driver.FindElement(By.XPath("//span[.='Abmelden']/ancestor::button").Click();
一切都很好,因为按钮是可点击的元素,而不是跨度。
在其他浏览器中,这通常无关紧要,因为它们只是在X和Y坐标中生成单击,其中元素的边界rect具有水平和垂直中心。