RemoteDriver с использованием браузера Chrome не работает в раскрывающемся меню

Я использую 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. Любая помощь будет очень признательна. Спасибо еще раз.

Брайан


person Bryan K    schedule 05.10.2012    source источник


Ответы (2)


Сделай по другому...

//select[@name='suffix']/option[@value='Ms.']

Ваш запрос XPath не кажется допустимым. Это даже не имеет логического смысла. Спускайтесь по дереву, а не взбирайтесь на него.

person Arran    schedule 05.10.2012
comment
Спасибо, Арран, это было так. Не знаю, почему я решил взобраться на дерево, а не спуститься по нему. На самом деле я даже удивлен, что это работает в FF и IE. - person Bryan K; 08.10.2012

помимо подхода, упомянутого 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.']"

ТАКЖЕ не забудьте проверить найденные локаторы в firepath, аддон firebug в ffox locator verify

подход 1

driver.findElement(By.cssSelector(msCssSelector)).click();

подход 2 с использованием API конструктора действий

WebElement mnuOptionElement;
mnuOptionElement = driver.findElement(By.cssSelector(mrCssSelector));
Actions builder = new Actions(driver);
// Move cursor to the Main Menu Element
builder.moveToElement(mnuOptionElement).click();

дополнительную информацию о конструкторе действий вы можете получить по адресу здесь

подход 3, используя jsExecutor, чтобы щелкнуть веб-элемент. Всегда работает для меня во всех ситуациях.

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

Надеюсь, теперь это работает для вас)

person eugene.polschikov    schedule 06.10.2012
comment
Спасибо, я не знал, что селекторы CSS работают быстрее, чем xpath. Я обязательно буду использовать это в будущем. - person Bryan K; 08.10.2012