单击在Selenium Ide中工作但不在Webdriver中工作的链接

时间:2013-09-22 18:30:23

标签: selenium selenium-webdriver selenium-rc selenium-ide

我正在测试网站“https://www.freecrm.com/index.html

的方案

登录凭据[john2013 / john2013]

Scenario :

1 open the site https://www.freecrm.com/index.html

2 login  with valid credentials

3 click on the "New Contacts" link

4 Add new contacts

使用Selenium ide我可以登录并点击“新建联系人”链接,但当我尝试使用Webdriver [java]做同样的事情时,我无法点击“新建联系人”链接

我写的代码如下:

driver.findElement(By.name("username")).clear()     
driver.findElement(By.name("username")).sendKeys("john2013");
driver.findElement(By.name("password")).clear();
driver.findElement(By.name("password")).sendKeys("john2013");
driver.findElement(By.cssSelector("input[type=\"image\"]")).click();

上述代码工作正常,但点击“新建联系人”链接

driver.findElement(By.xpath("//div[@class='noprint']/span[@class='headertext']/a[3]/")).click();

虽然在IDE中使用相同的xpath,但仍无效。

我尝试了预期的条件选项,睡觉但没有任何工作。

任何人都可以帮助我。

3 个答案:

答案 0 :(得分:1)

问题是您的网页使用了框架集。您应该告诉您的webdriver在搜索您的元素时使用哪个框架。所以试试这个:

driver.findElement(By.name("username")).clear()     
driver.findElement(By.name("username")).sendKeys("john2013");
driver.findElement(By.name("password")).clear();
driver.findElement(By.name("password")).sendKeys("john2013");
driver.findElement(By.cssSelector("input[type=\"image\"]")).click();

//switch the driver to use one of the frames on your page. Potentially wait for a bit till the page is loaded
driver.switchTo().frame("mainpanel");

driver.findElement(By.xpath("//*[text()='New Contact']")).click();

答案 1 :(得分:0)

请将链接的xpath更改为

xpath=//a[contains(text(),'<whatevertext>')]

如果在页面的某个部分已经存在相同的文本链接,我们可以继续出现。如果它是第二次重复的示例:

xpath=(//a[contains(text(),'<whatevertext>')])[2]

如果Nothing正在运行,最好的方法是通过java脚本执行器。

首先获取链接的元素。

然后使用以下代码“     webelement = driver.findElement(by.xpath(“= //一个[含有(文本(), '')]     “))     (JavaScriptExecutor)driver.executescript( “参数[0]。点击();”,webelement)

答案 2 :(得分:0)

实际说说// div [@class =&#39; noprint&#39;] / span [@class =&#39; headertext&#39;] / a [3] /是绝对XPath。

因为它以[3]结尾,所以位置总是不同所以建议使用相对的XPath / CSS

建议的CSS:css = .noprint&gt; .headertext&gt; a.classname 另一个建议的CSS:css = .noprint&gt; .headertext&gt;一个[属性=&#39;值&#39;]

所以我们可以使用上述任何一种格式。