我使用的是selenium-standalon-2.25.0,chrome是13版。
这是html:
<select name="suffix" class="select">
<option value="" selected>Please select...</option>
<option value="Ms.">Ms.</option>
<option value="Mrs.">Mrs.</option>
<option value="Mr.">Mr.</option>
</select>
这是我打电话来选择其中一个选项的命令。另一个是我从数据库中获取的变量,问题是我从数据库中获取的后缀。这适用于firefox和IE,但不适用于chrome:
driver.findElement(By.xpath("//option[@value='" + other + "' and ..[@name='" + question + "']]")).click();
这是我得到的例外情况:
org.openqa.selenium.InvalidSelectorException: findElement execution failed;
Unable to locate an element with the xpath expression //option[@value='Ms.' and ..[@name='suffix']] because of the following error:
Error: INVALID_EXPRESSION_ERR: DOM XPath Exception 51 (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 52 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/invalid_selector_exception.html
Build info: version: '2.25.0', revision: '17482', time: '2012-07-18 21:08:56'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_25'
Driver info: driver.version: EventFiringWebDriver
Session ID: bf6368f23db4a2fe27d9b96849af1b1d
Command duration or timeout: 646 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/invalid_selector_exception.html
Build info: version: '2.25.0', revision: '17482', time: '2012-07-18 21:09:54'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '3.2.0-31-generic', java.version: '1.6.0_31'
Driver info: driver.version: RemoteWebDriver
Session ID: 134947044387
我一直在研究这个问题,我的猜测与我的findElement语句有关。奇怪的部分是用FF和IE工作正常。任何帮助都会非常感激。再次感谢。
布赖恩
答案 0 :(得分:1)
以其他方式做到......
//select[@name='suffix']/option[@value='Ms.']
您的XPath查询似乎不是有效的。它甚至没有逻辑意义。走下树,而不是上去。
答案 1 :(得分:0)
除了 Arran 提到的方法之外,还尝试使用css选择器。它们比xPaths工作得更快。
String msCssSelector= "select[name='suffix']>option[value='Ms.']"
String mrsCssSelector= "select[name='suffix']>option[value='Mrs.']"
String mrCssSelector= "select[name='suffix']>option[value='Mr.']"
另外,不要忘记验证firefox中的找到定位器,ffox中的firebug插件
接近1
driver.findElement(By.cssSelector(msCssSelector)).click();
使用操作构建器API 方法2
WebElement mnuOptionElement;
mnuOptionElement = driver.findElement(By.cssSelector(mrCssSelector));
Actions builder = new Actions(driver);
// Move cursor to the Main Menu Element
builder.moveToElement(mnuOptionElement).click();
有关“动作”构建器的详细信息,您可以获取here
接近3 使用jsExecutor单击web元素。在所有情况下始终适合我。
JavascriptExecutor js = (JavascriptExecutor) driver;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("var x = $(\'"+msCssSelector+"\');");
stringBuilder.append("x.click();");
js.executeScript(stringBuilder.toString());
希望现在适合你)