无法从Selenium Java的html元素中获取文本

时间:2016-08-02 13:35:40

标签: java selenium selenium-webdriver automation automated-tests

我正在使用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。

2 个答案:

答案 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']"));