2015-10-26 3 views
1

Я тестирую приложение, и в приложении есть таблица, содержащая флажки (3 строки, x столбцов). Ниже приведен html для части этой таблицы (1row). Я пытаюсь щелкнуть по тексту одного из этих элементов, чтобы выбрать или снять флажок на основе текста. Так, например, я хочу щелкнуть по тексту «Текст рядом с флажком для nr 8», чтобы выбрать это текстовое поле. Тем не менее, я не хочу идти туда через жесткий xpath, используя код, например/table/tbody/tr [2]/td [2]/div/span) [2], но на основе текста. Я пытаюсь код, как те ниже, но они, кажется, не работает:Элемент поиска неисправностей

driver.findElement(By.xpath("(//*[@class='settingsPanelTD' and text()='Text next to checkbox for nr 8']")).click(); 
driver.findElement(By.xpath("(//*[@class='settingswidgetTitle' and text()='Text next to checkbox for nr 8']")).click(); 
driver.findElement(By.xpath("(//*[@class='settingswidgets' and text()='Text next to checkbox for nr 8']")).click(); 

Я хотел бы создать строку для окончательного XPath, так что вы только изменить текст, который вы хотите нажать изменить тест, что-то вроде:

String text = "Text next to checkbox for nr 8"; /** variable text based on what you want to click */ 
String locator = "//*[@class='settingswidgets' and text()='"; 
String xpathitem = locator + text + "']"; 
driver.findElement(By.xpath(xpathitem)).click(); 

это HTML:

<td class="settingsPanelTD" width="33%"> 
<div class="settingwidgetsTitle"> 
    <input id="widgetsettings8" class="settingwidgets" type="checkbox" alt="2"> 
    <span>Text next to checkbox for nr 8</span> 
    <a class="AddWidget" href="#"></a> 
</div> 
</td> 
<td class="settingsPanelTD" width="33%"> 
<div class="settingwidgetsTitle"> 
    <input id="widgetsettings9" class="settingwidgets" type="checkbox" alt="2"> 
    <span>Text next to checkbox for nr 9</span> 
    <a class="AddWidget" href="#"></a> 
</div> 
</td> 
<td class="settingsPanelTD" width="33%"> 
<div class="settingwidgetsTitle"> 
    <input id="widgetsettings9" class="settingwidgets" type="checkbox" alt="2"> 
    <span>Text next to checkbox for nr 10</span> 
    <a class="AddWidget" href="#"></a> 
</div> 
</td> 

Я использую затмение, Селен и Java.

ответ

1

Используемые XPaths неверны. Третий XPath используется ближе всего к правильному решению:

//*[@class='settingswidgets' and text()='Text next to checkbox for nr 8'] 

На простом английском языке, ваш XPath означает - искать для любого элемента в документе с class="settingswidgets" и текстом, равным Text next to checkbox for nr 8. К сожалению, такой элемент не существует.

Одним из возможных XPath вы можете использовать это:

//span[text()="Text next to checkbox for nr 8"] 

Этот поиск любого span элемента с соответствующим текстом.

Вы могли бы использовать:

String text = "Text next to checkbox for nr 8"; 
String locator = "//span[text()='"; 
String xpathitem = locator + text + "']"; 
driver.findElement(By.xpath(xpathitem)).click(); 

Это должно сгенерировать нужный щелчок.

+1

Спасибо! который работал как шарм. Не знал, что вы также можете использовать текст диапазона. Все еще новое в этом и обучение. – Hugo

0

Я не хватает репутации, чтобы добавить комментарий , но в случае, если вы не можете выбрать опцию, нажав Span тег, необходимо нажать на входном теге

ArrayList<WebElement> al=new ArrayList<WebElement>(); driver.findElements(By.className("settingwidgetsTitle"));

for(int i=0;i<al.size();i++){ if(driver.findElement(By.xpath(".//div[@class='settingwidgetsTitle']/span")).getText().equals("Option to Select")){

driver.findElement(By.xpath(".//div[@class='settingwidgetsTitle']["+i+"] /input").click()); break; }}

Смежные вопросы