我试图点击带有文本克隆概念的跨度。以下是html
<ul class="context-menu-list context-menu-root" style="width: 210px; top: 500px; left: 231px; z-index: 2;">
<li class="context-menu-item">
<li class="context-menu-item">
<li class="context-menu-item disabled">
<li class="context-menu-item">
<li class="context-menu-item icon icon-evn-icon-clone-concept">
<span>Clone concept</span>
</li>
<li class="context-menu-item">
<li class="context-menu-item icon icon-delete disabled">
</ul>
我使用的javascript代码是:
driver.findElement(By.xpath("//span[text()='Clone concept']")).click();
我通过firepath验证了这是元素的权利。
我还确保根据链接How to force Selenium WebDriver to click on element which is not currently visible?
显示元素这是计算的css
font-family Verdana,?Arial,?Helvetica,?sans-serif
.context-menu-list Verdana,?Arial,?Helvetica,?sans-serif
jquery...enu.css (line 15)
body Arial,?Helvetica,?sans-serif
swa.css (line 3)
font-size 11px
.context-menu-list 11px
jquery...enu.css (line 15)
list-style-type none
.context-menu-list none
jquery...enu.css (line 15)
还尝试了以下代码:
WebElement foo = driver.findElement(By.xpath("//span[text()='Clone concept']"));
Actions bar = new Actions(driver);
bar.click(foo).perform();
异常: org.openqa.selenium.ElementNotVisibleException:元素当前不可见,因此可能无法与之交互 命令持续时间或超时:30.04秒 构建信息:版本:&#39; 2.24.1&#39;,修订版:&#39; 17205&#39;,时间:&#39; 2012-06-19 16:53:24&#39; 系统信息:os.name:&#39; Windows 7&#39;,os.arch:&#39; amd64&#39;,os.version:&#39; 6.1&#39;,java.version:&# 39; 1.7.0&#39; 驱动程序信息:driver.version:RemoteWebDriver
任何帮助将不胜感激。
那些被困在这里的人的另一个黑客:
目前,我已经能够将这个巨大的测试用例分成更简单的测试用例。
答案 0 :(得分:12)
不幸的是,Webdriver在处理问题中描述的情况时似乎不太好。你有几个选择。使用Javascript嘲笑:
JavascriptLibrary jsLib = new JavascriptLibrary();
jsLib.callEmbeddedSelenium(selenium,"triggerMouseEventAt", elementToClick,"click", "0,0");
或
((JavascriptExecutor) driver).executeScript("arguments[0].click();", elementToClick);
或者您可以使用操作单击菜单链中的所有元素。不幸的是,我发现这是不可靠的。
我有一个脚本,可以检测某个元素是否在菜单链中,如果是按所需顺序点击它们,最后点击用户想要的那个,我可以将它发布到某个地方,但它不是'好不好。
答案 1 :(得分:0)
问题出在您的xpath中。 selenium webdriver正在屏幕上的xpath中找到一个重复的元素,这个元素是隐藏的并且会对它进行操作。请更改xpath,它将工作。我在代码中做了同样的事情..
答案 2 :(得分:0)
对于上面的查询,这里是xpath:
//ui[@class='context-menu-list context-menu-root']/span[contains(text(),'Clone concept')]
答案 3 :(得分:0)
基本上,有四个原因导致元素不可交互。通常没有四个解决方案。
1)计时-元素加载所需的时间。为此,您需要检查如何使用隐式显式等待
2)检查元素是否在框架中
3)定位器不正确
4)错误的响应方式实施。这仍然源于3)。某些网站仅针对移动版和网络版启用了一个代码。因此,当您检查xxxxx.size时,该元素将具有多个实例。您将需要在列表中搜索显示为!= none的列表。然后,可以将元素的位置附加到xpath或正在使用的任何定位器上。例如。 xxxx/yyyyy/zzzz[3]
(如果列表中的位置为4)。
将此代码用于Java,
假设
a)定位器类型为id
b)列表的名称是nameOfYourElements
List<WebElement> nameOfYourElements = wd.findElements(By.id("nameOfYourID"));
System.out.println(nameOfYourElements.size());