包含Selenium WebDriver Java文本的Xpath不识别Web元素

时间:2016-08-04 05:18:02

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

我正在使用Selenium WebDriver和Java。

以下是我的HTML代码:

<div id="servicetype-pp" class="z-combobox-popup " style="display: none; width: auto;">
    <ul id="servicetype-cave" class="z-combobox-content">
        <li id="zk_comp_140" class="z-comboitem">
        <li id="zk_comp_141" class="z-comboitem">
            <span class="z-comboitem-image"></span>
            <span class="z-comboitem-text">Bill Generation Service</span>
        </li>
        <li id="zk_comp_142" class="z-comboitem">
        <li id="zk_comp_143" class="z-comboitem">
        <li id="zk_comp_144" class="z-comboitem">
        <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>
</div>

我已经通过xpath定义了包含特定文本的WebElement。

//div[@id='servicetype-pp']//span[contains(text(),'Bill Generation Service')]

它不起作用。但是,当我用一个单词搜索时,没有任何空格,它工作正常。

//div[@id='servicetype-pp']//span[contains(text(),'Bill')] or
//div[@id='servicetype-pp']//span[contains(text(),'Generation')] or 
//div[@id='servicetype-pp']//span[contains(text(),'Service')]

这似乎是空间问题。

请帮忙。

TIA。

2 个答案:

答案 0 :(得分:2)

您可以尝试使用normalize-space()

//div[@id='servicetype-pp']//span[contains(text()[normalize-space()], 'Bill Generation Service')]

答案 1 :(得分:0)

实际上你的<div id="servicetype-pp" class="z-combobox-popup " style="display: none; width: auto;">看起来是不可见的,这就是为什么你无法与元素互动的原因,请尝试如下: -

WebElement el = driver.findElement(By.id("servicetype-pp"));
el = (WebElement)((JavascriptExecutor)driver).executeScript("arguments[0].style.display = 'block';return arguments[0]", el);

//Now you can find your desire element
WebElement spanElement = el.findElement(".//span[contains(text(),'Bill Generation Service')]");

//Now do your further steps with this element

已修改: - 如果您收到NuSuchElementExcpetion表示可见性不是问题,则此元素可能位于frame或{{1}内}。如果是,您需要在找到元素之前切换iframeframe,如下所示:

iframe