我正在使用selenium和Java。我无法从组合框的html元素中获取文本。每次我在组合框中获取所选值的空白文本时。
下面是我的组合框的html结构。
<ul id="servicetype-cave" class="z-combobox-content" style="height: auto; width: auto;">
<li id="zk_comp_140" class="z-comboitem">
<li id="zk_comp_141" class="z-comboitem">
<li id="zk_comp_142" class="z-comboitem">
<li id="zk_comp_143" class="z-comboitem">
<li id="zk_comp_144" class="z-comboitem z-comboitem-selected">
<span class="z-comboitem-image"/>
<span class="z-comboitem-text">Bill Grouping Service</span>
</li>
<li id="zk_comp_145" class="z-comboitem">
<li id="zk_comp_146" class="z-comboitem">
<li id="zk_comp_147" class="z-comboitem">
<li id="zk_comp_148" class="z-comboitem">
<li id="zk_comp_149" class="z-comboitem">
<li id="zk_comp_150" class="z-comboitem">
</ul>
我在xpath下面使用了元素
@FindBy(xpath = "//ul[@id='servicetype-cave']/li[contains(@class,'z-comboitem-selected')]/span[@class='z-comboitem-text']")
public WebElement selectedServiceName;
public void selectService {
// Selecting an option from dropdown
WebElement tempEle = driver.findElement(By.xpath("(//div[@id='servicetype-pp']//span[2])[3]"));
commonFunctions.clickElement(tempEle);
String strtemp = selectedServiceName.getText();
System.out.println("Selected Service: " + strtemp);
}
请帮忙。
TIA。
答案 0 :(得分:2)
我建议您尝试使用By.cssSelector()
,如下所示: -
WebElement el = driver.findElement(By.cssSelector("ul#servicetype-cave li.z-comboitem-selected span.z-comboitem-text"));
或
WebElement el = driver.findElement(By.cssSelector("ul#servicetype-cave li.z-comboitem.z-comboitem-selected span:nth-child(2)"));
现在使用.getText()
获取如下文字:
el.getText();
如果遗憾的是.getText()
无效,请尝试使用.getAttribute("textContent")
,如下所示:
el.getAttribute("textContent");
或尝试使用.getAttribute("innerHTML")
,如下所示:
el.getAttribute("innerHTML");
希望它有效.. :)
答案 1 :(得分:0)
@FindBy
渴望内化。这意味着它会在Page
object创建时初始化。我假设你应该在一些先决条件后得到组合框的值。因此,请使用lazy initialization
。在您真正需要的地方调用以下代码
findElement(By.xpath("//ul[@id='servicetype-cave']/li[contains(@class,'z-comboitem-selected')]/span[@class='z-comboitem-text']"));