В последнее время в моей работе возникает проблема с созданием правильного селектора Xpath для получения содержимого требуемой текстовой области. Вот структура моего HTML документа:
<div id="X115OutsideBorder" style="left: 59.1%; top: 855px; width: 14.6%; height: 22px; position: absolute;">
<div class="CheckBox ltr mandatoryFieldStyle " id="X115Border">
<div class="xEdit FormatInputReadonly" id="X115Edit">
<div style="display: inline-block; direction: ltr;">
<label disabled="" class="xCheckboxIcon" id="X115Icon" for="X115"></label>
<input name="instance/CUST.risk.major.inc" tabindex="-32768" disabled=""
id="X115" onclick="handleOnClick(this, event);"
onfocus="handleOnFocus(this, event);" onblur="handleOnBlur(this, event);
applyToSameControl(this);" onchange="handleOnChange(this, event);"
type="checkbox" readonly="" value="true" datachangeevent="3034" dvdvar=""
buttonid="" sctype="CheckBox" ref="instance/CUST.risk.major.inc">
</div>
<span class="xCheckboxLabelSpan FormatLabel " id="X115LabelSpan">
<label class="xCheckboxLabel" id="X115Label" for="X115" enabledstyle="
color: #000000; ">Risk to Major Incident?</label>
</span>
</div>
</div>
</div>
<input id="X117" type="hidden" value="0" dvdvar="instance/CUST.interface.error">
<span class="Label" id="X119" style="left: 0%; top: 885px; width: 15.1%; height: 22px; text-align: right; position: absolute;" type="label">
<label id="X120_Label" for="X120">Additional Information</label>
</span>
<div class="MultiText" id="X120Border" style="left: 16%; top: 885px; width: 71.5%; height: 187px; position: absolute;">
<div class=" mandatoryFieldStyle xEdit xTextArea" id="X120Edit" style="height: 187px;">
<textarea name="instance/Additional.information" tabindex="-32768" id="X120"
style="height: 185px;" onkeyup=" lockFormOnValueChange(this); "
onclick="handleOnClick(this, event);" onfocus="handleOnFocus(this, event);"
onblur="handleOnBlur(this, event); applyToSameControl(this);"
onchange="handleOnChange(this, event);" rows="4" cols="81"
dvdvar="instance/Additional.information" buttonid="" sctype="MultiText">
</textarea>
</div>
</div>
Итак, я создал класс в Java с использованием инфраструктуры Selenium, выглядящий следующим образом:
Thread.sleep(5000);
WebDriverWait wait = new WebDriverWait(driver, 15);
WebElement additionalInfoElement = wait.until
(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='sm-clpsSectionCnt ie cntExpanded']
//div[@class='MultiText']//div[@class=' mandatoryFieldStyle xEdit xTextArea'] //textarea[contains(@id,'X120')]")));
driver.findElement(By.xpath("//div[@class='sm-clpsSectionCnt ie cntExpanded'] //div[@class='MultiText']//div[@class=' mandatoryFieldStyle xEdit xTextArea']
//textarea[contains(@id, 'X120')]"));
Thread.sleep(3000);
additionalInfoElement.click();
String additionalInfoContent = additionalInfoElement.getText();
driver.switchTo().defaultContent();
Map<String, String> assigneesToKeywords = new HashMap<>();
assigneesToKeywords.put("ee57977","Please select the affected Process / Application::SSR");
assigneesToKeywords.put("c308042","Please select the affected Process / Application::SSR1");
assigneesToKeywords.put("p853780","Please select the affected Process / Application::MMSR");
assigneesToKeywords.put("c323607","Please select the affected Process / Application::Reporting");
assigneesToKeywords.put("c152236","Please select the affected Process / Application::BOI");
assigneesToKeywords.put("ex73629","K3, K4");
assigneesToKeywords.put("C321274","Please select the affected Process / Application::CPR");
assigneesToKeywords.put("X","Please select the affected Process / Application::FOBO");
assigneesToKeywords.put("c325285","Please select the affected Process / Application::T-RECS");
for (Map.Entry<String,String> entry : assigneesToKeywords.entrySet()){
if (entry.getValue().contains(additionalInfoContent)){
chosenAssignee=entry.getKey();
}else
chosenAssignee="XXXX";
}
return chosenAssignee;
}
Что я пытаюсь сделать прямо сейчас, это получить содержимое текстовой области с именем «Дополнительная информация» и сравнить его со значениями карты «assigneesToKeywords». Однако созданный мной Xpath не работает, и у меня не осталось идей, как это исправить ... Я все еще получаю следующую ошибку: "Ожидаемое условие не выполнено: ожидание видимости элемента, расположенного в By.xpath:. .. "
До сих пор я пытался увеличить время ожидания, но оно не сработало. Я думаю, все дело в правильной конструкции Xpath.
Есть идеи, что я делаю неправильно? Заранее большое спасибо, ребята!
С уважением, Матеуш.