无法单击列表元素
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法单击列表元素相关的知识,希望对你有一定的参考价值。
单击“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]
答案
根据给定的html单击是,您必须将带有ExpectedConditions子句的WebDriverWait作为elementToBeClickable引导,并且您可以使用以下代码块:
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='content']//div[@class='control']/ul[@class='keys']/li//span[@class='tick']"))).click();
另一答案
有几个元素(如下所示)可以响应您的点击,因此您需要手动找出哪一个。
<li class="container
<div class="letter"><span>
<span class="label">
打开Chrome的DevTool,在Element
选项卡中,检查上面3个元素中的一个元素,选择元素的HTML节点,然后切换到Console
选项卡并执行$0.click()
单击元素,如果选择单击后选项,则表示您应该单击它而不是其他2个元素。如果未选择选项,请对3个元素的下一个元素重复上述步骤。
我想应该点击<li class="container
// click 'Yes'
driver.findElement(By.cssSelector("div.attachment-wrapper ul.keys > li:nth-child(1) span.label"))
// click 'No'
driver.findElement(By.cssSelector("div.attachment-wrapper ul.keys > li:nth-child(2) span.label"))
如果您的脚本仍然失败,即使您找到了正确的元素,请尝试在click()之前添加一些sleep(),如果睡眠工作,则意味着您需要等待片刻将选项加载到页面中,从而替换sleep()等待()
另一答案
尝试将xpath更改为下面并执行单击操作:
//*[starts-with(@class, 'label') and contains(text(), 'No')]
另一答案
试试javascriptExecutor
JavascriptExecutor je = (JavascriptExecutor) driver;
WebElement element = driver.findElement(By.xpath("--Path--"));
je.executeScript("arguments[0].scrollIntoView(true);",element);
element.click();
这对我有用。
以上是关于无法单击列表元素的主要内容,如果未能解决你的问题,请参考以下文章
片段 A 的列表视图中的片段 B 中的新列表视图,单击 A 的列表项