Selenium webdriver - click()成功但实际上并没有发生

时间:2012-11-18 16:39:57

标签: selenium webdriver selenium-webdriver selenium-grid

我使用selenium网格(在4个浏览器上运行测试:FF13,FF16,IE9和chrome。每个浏览器都在不同的机器上。 在测试的相关部分中,我找到一个可点击元素并单击它。 在FF13,IE9和chrome上工作得很好:找到了元素并点击了它。 在FF16上,找到了元素并且webdriver“声称”它点击了它,但是按钮的操作(更改页面上的表格的布局)不会发生。

注意:我使用2.25版 谢谢, Tizki

2 个答案:

答案 0 :(得分:2)

嗯......我会像js注射一样使用作弊(如果包含jQuery的支持)。 e.g。

String cssSelector="...blablabla....";
    JavascriptExecutor js = (JavascriptExecutor) driver;
    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append("var x=$(\'"+cssSelector+"\');");
    stringBuilder.append("x.click()");
    js.executeScript(stringBuilder.toString());

第二种方法(解决方案): 尝试使用document.getElementsByTagName找到使用DOM模型单击的元素 - 这将返回找到的元素数组,您可以使用firefox中的命令行轻松找到所需的元素。 所以你的元素就像:

document.getElementsByTagName[n]  

其中n是找到的数组document.getElementsByTagName

中元素的顺序

下面的方法代码我使用参数tagName - 你要查找元素的标记名称,而argNum是一个你应该从数组document.getElementsByTagName的整个长度中减去得到n的数字 - 元素的顺序:

public void jsDirectClickUsingDOM_GEBTagName(String tagName,int argNum) throws IOException {
        JavascriptExecutor js = (JavascriptExecutor) driver;
        StringBuilder stringBuilder = new StringBuilder();
 stringBuilder.append("document.getElementsByTagName(\'"+tagName+"\')[document.getElementsByTagName(\'"+tagName+"\').length-"+argNum+"].click()");
        js.executeScript(stringBuilder.toString());
    }

无论如何这都应该有效。希望你能清楚地知道:)

答案 1 :(得分:0)

我认为webdriverFF16的兼容性存在问题。由于同样的原因,我被FF 13.0.1困住了。顺便说一句,我找不到Firefox和webdriver之间的任何兼容性矩阵,但经过多次尝试在不同版本的Firefox上运行测试后,我决定坚持使用真正有用的那个。