8

我正在尝试使用文本克隆概念单击跨度。以下是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();

我通过火路验证了这对元素是正确的。

我还确保根据链接如何强制 Selenium WebDriver 单击当前不可见的元素,该元素是可见的?

这是计算出来的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 秒构建信息:版本:'2.24.1',修订:'17205',时间:'2012 -06-19 16:53:24' 系统信息:os.name:'Windows 7',os.arch:'amd64',os.version:'6.1',java.version:'1.7.0' 驱动程序信息: driver.version: RemoteWebDriver

任何帮助将不胜感激。

对于那些被困在这里的人的另一个技巧:
目前我已经能够通过将这个巨大的测试用例拆分成更简单的测试用例来继续前进。

4

4 回答 4

12

不幸的是,Webdriver 似乎并不擅长处理您的问题中描述的情况。不过,您有几个选择。使用 Javascript 模拟点击:

JavascriptLibrary jsLib = new JavascriptLibrary(); 
jsLib.callEmbeddedSelenium(selenium,"triggerMouseEventAt", elementToClick,"click", "0,0");

或者

((JavascriptExecutor) driver).executeScript("arguments[0].click();", elementToClick);

或者您可以尝试使用操作来单击菜单链中的所有元素。不幸的是,我发现这是不可靠的。

我有一个脚本,它检测一个元素是否在菜单链中,如果它以所需的顺序点击它们,最终点击用户想要的,如果你想要它我可以把它贴在某个地方,但它不漂亮或短的。

于 2012-08-23T05:02:37.510 回答
1

对于上面的查询,这里是 xpath:

//ui[@class='context-menu-list context-menu-root']/span[contains(text(),'Clone concept')]
于 2014-09-12T06:58:34.887 回答
0

问题出在您的 xpath 中。selenium webdriver 正在通过屏幕中的 xpath 找到一个重复的元素,该元素被隐藏并试图对其执行操作。请更改 xpath,它将起作用。我在我的代码中做了同样的事情..

于 2013-08-19T18:57:08.653 回答
0

基本上,元素不可交互的原因有四个。没有四个通常是解决方案。

1) 时间 - 元素加载所需的时间。为此,您需要检查如何使用隐式显式等待

2)检查元素是否在框架中

3) 定位器不正确

4) 响应性的错误实现。这仍然源于3)。有些网站只为移动版和网页版启用了一个代码。因此,当您检查 xxxxx.size 时,该元素将具有多个实例。您必须在列表中搜索显示!= 无的列表。然后,您可以将元素的位置附加到您的 xpath 或您正在使用的任何定位器。例如xxxx/yyyyy/zzzz[3],如果位置是列表中的 4。

将此代码用于java,
假设
a)定位器类型是id
b)列表名称是nameOfYourElements

List<WebElement> nameOfYourElements = wd.findElements(By.id("nameOfYourID"));
System.out.println(nameOfYourElements.size());
于 2019-07-31T10:15:11.847 回答