无法单击列表元素

时间:2018-02-27 19:49:32

标签: java selenium selenium-webdriver webdriver html-lists

点击“li”表示元素无法点击。对于“是”和“否”选项,单击操作不适用于span或div。请建议一个更好的方法。 用户需要对问题回答“是”或“否”。选项以li元素

显示

以下是代码段:

<div class="question">
<span>Did one of our current shoppers refer you to apply?
<span class="asterisk">*</span>
</span>
</div>

<div class="content">
<div class="content-wrapper">
<div class="attachment-wrapper">
<div class="control">
<ul class="keys">
<li class="container step0" style="width: 69px;">
<div class="aux " style="opacity: 1;">
<div class="bg"></div>
<div class="bd"></div>
</div>
<div class="letter"><span>Y</span></div>
<span class="label">Yes</span>
<span class="tick"></span>
</li>

<li class="container step0 selected" style="width: 69px;">
<div class="aux " style="opacity: 1;">
<div class="bg"></div>
<div class="bd"></div>
</div>
<div class="letter"><span>N</span></div>
<span class="label">No</span>
<span class="tick"></span>
</li>
</ul>

</div>
</div>
<div class="clear"></div>
<div class="message "><span></span><div></div></div>

</div>
</div>

已执行的操作:单击span元素中的“否”

WebElement refer = 
wait.until(ExpectedConditions.visibilityOfElementLocated
(By.xpath("//li[@id='45182998']/div/div[3]/div/div[1]/div/ul/li[2]/span[1]"
)));
action.moveToElement(refer).click().build().perform();

例外:

org.openqa.selenium.TimeoutException: Timed out after 20 seconds waiting for visibility of element located by By.xpath: //li[@id='45182998']/div/div[3]/div/div[1]/div/ul/li[2]/span[1]

This is what the question looks like

4 个答案:

答案 0 :(得分:0)

有几个元素(如下所示)可以响应您的点击,因此您需要手动找出哪一个。

  • <li class="container
  • <div class="letter"><span>
  • <span class="label">

打开Chrome的DevTool,在Element标签中,检查上面3个元素中的一个元素,选择元素的HTML节点,然后切换到Console标签并执行{{1单击该元素,如果在单击后选择该选项,则表示您应该单击它而不是其他2个元素。如果未选择选项,请对3个元素的下一个元素重复步骤。

我想应该点击$0.click()

<li class="container

如果您的脚本仍然失败,即使您找到了正确的元素,请尝试在click()之前添加一些sleep(),如果睡眠工作,则意味着您需要等待片刻将选项加载到页面中,从而替换睡眠( )等待()

答案 1 :(得分:0)

根据给定的 HTML 点击,您必须将 WebDriverWait ExpectedConditions 子句一起归为< em> elementToBeClickable ,您可以使用以下代码块:

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='content']//div[@class='control']/ul[@class='keys']/li//span[@class='tick']"))).click();

答案 2 :(得分:0)

尝试将xpath更改为以下并执行点击操作:

//*[starts-with(@class, 'label') and contains(text(), 'No')]

答案 3 :(得分:0)

尝试使用JavascriptExecutor

new webpack.ProvidePlugin({
   $: 'jquery',
   jQuery: 'jquery',
   'window.jQuery': 'jquery',
})

这对我有用。