无法单击列表元素

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]

This is what the question looks like

答案

根据给定的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 的列表项

如何从片段内的列表视图打开链接网址?

调用片段活动错误无法实例化活动。无法转换为 android.app.Activity

单击ListViewItem时Android加载片段

Android片段中的问题:仍然单击上一个片段

不同活动的片段之间的共享元素转换