我正在使用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。
答案 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}内}。如果是,您需要在找到元素之前切换iframe
或frame
,如下所示:
iframe