2012-07-26 206 views
32

我最近刚做的我硒IDE代码硒网络驱动器出口。我发现很多在IDE中工作的命令无法工作,或者硒驱动程序声称根本不支持。到目前为止,我已经解决在同一时间小于理想的这些问题的一个...点击命令的webdriver不起作用

目前我正在努力找出为什么点击一个按钮,而它在以前工作不与卷筒纸驱动器工作硒IDE。我的浏览器是FF 13,我的操作系统是Ubuntu。

代码段

WebElement loginButton = driver.findElement(By.name("submit")); 
loginButton.click(); 

我以前试过

driver.findElement(By.name("submit")).click(); 

但上述行也失败了。元素正在被选中,但它不会按我的意愿登录。我发现其他页面有类似的问题,但他们的问题似乎与Internet Explorer不是Firefox。我甚至不想考虑IE会给我带来的问题。

谢谢,

P.S. 在不丢失我写的所有测试的情况下,从selenium IDE迁移到Selenium Webdriver的更好方法的提示也可以解决此问题。

+0

你尝试'断言loginButton.isDisplayed()(在我的环境对一个按钮!); '?当你说click()操作失败时 – 2012-07-26 21:28:33

+2

?你是否有任何错误或exceptions.Please张贴他们理解为什么click()操作失败。 – 2012-07-26 23:46:50

回答

67

如果你肯定知道的元素存在,你可以试试这个模拟点击 - 如果.Click()不工作

driver.findElement(By.name("submit")).sendKeys(Keys.Return); 

driver.findElement(By.name("submit")).sendKeys(Keys.Enter); 
+1

是不是Keys.Enter? – 2012-07-27 13:41:35

+0

@PavelJanicek任何一个将做的伎俩,但编辑显示两者;) – TheLifeOfSteve 2012-07-27 14:02:10

+3

哇。我不知道这个。 Upvote教我新东西:) – 2012-07-27 14:13:29

1

有什么不对任一版本的代码。无论是什么原因造成的,都不是这样。

你三倍检查你的定位器?你的元素肯定有name = submit not id = submit?

2

感谢所有的答案大家!我找到了一个解决方案,结果我没有在我的问题中提供足够的代码。

问题是不是毕竟与click()函数有关,而是与用于我的项目的cas认证相关。在Selenium IDE中,我的登录测试对以下位置执行了一个“打开”命令,

/cas/login?service=https%1F%8FAPPNAME%2FMOREURL%2Fj_spring_cas_security 

工作正常。我将测试导出到自然保存该位置的Selenium webdriver。在硒的webdriver的命令是,

driver.get(baseUrl + "/cas/login?service=https%1A%2F%8FAPPNAME%2FMOREURL%2Fj_spring_cas_security"); 

至于原因,我还没弄清楚失败上面。当我把它改成,

driver.get(baseUrl + "MOREURL/"); 

的点击命令突然开始工作......我将编辑这个答案,如果我能弄清楚到底为什么这是。

注:我挡住上面使用,以保护我公司产品的URL。

+0

你说它在IE浏览器上没有在Firefox上失败。你确定这种情况只是由位置引起的吗? – 2014-01-26 03:46:51

+0

请编辑原始问题,而不是发布更新作为答案。 – 2017-03-27 07:08:07

1

我正在使用firefox和一些原因,它没有采取点击命令,虽然从过去2months它工作。 我的感觉是利用sendKeys和这个网页解决了这个问题。现在,我使用的SendKeys(Keys.Enter)

5

一需要注意的主要问题是按钮是否启用。你仍然可以点击它们,没有任何东西会掉下来,元素在那里,但它没有准备好被点击,所以只是没有做任何事情。

我一直在使用webdriver,它使我花了大部分时间来弄清楚这一点!

下面的方法似乎是可靠地工作

private void TryClick(By selector) 
    { 
     var wait = WaitUpTo(TimeSpan.FromSeconds(10)); 
     var element = wait.Until(ExpectedConditions.ElementIsVisible((selector))); 

     //really important bit! 
     WaitUpTo(TimeSpan.FromSeconds(5)) 
      .Until(d => element.Enabled); 

     element.Click(); 
    } 

你使用它像

TryClick(By.XPath("//button[contains(.//*,'Some Text')]"));