.SendKeys(Keys.Enter)和.Click()之间的区别?

时间:2016-01-15 11:41:56

标签: c# selenium

我正在使用C#和Selenium处理一些自动化脚本,在IE11上运行我的测试。我试图使用WebElement中的.Click()函数单击一个链接,它根本不起作用,所以我尝试使用.SendKeys(Keys.Enter)函数,它起作用了。

我试图理解这种行为,但我无法弄清楚为什么会发生这种情况。 有谁知道使用.Click()和.SendKeys(Keys.Enter)?

之间的区别

2 个答案:

答案 0 :(得分:2)

来自documentation

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具有水平和垂直中心。

相关问题