0

我有一个网页,其中包含 2 个具有相同类名但具有不同 div 类的链接。第一个是不可见的(它在下拉菜单中),而我想要的另一个是可见的。所以,我试图找到可见元素。

他的 HTML :

 <div class="mainActionPanel">
   <a css="create"></a>
 </div>

该链接具有动态 ID。当我使用 ID 进行 XPath 搜索时,我正确地找到了该元素,但它已被弃用,因为该按钮在每个页面上的 ID 不同。

我尝试使用 Selenium IDE 定位元素,以下定位器有效:css=div.mainActionPanel > a.create

问题出在我上面展示的定位器上。当我试图找到元素时,我总是有这个例外:

NoSuchElementException : Element By.cssSelector: css=div.mainActionPanel > a.create (first) (LazyElement) 不存在。

他没有找到。我尝试了几种语法,例如 FluentLenium 文档 ( $("form > input[data-custom=selenium]") 中的示例,但没有奏效。

此外,el(".create").click()由于他选择了下拉链接,因此引发了 ElementNotVisibleException。

我怎样才能找到合适的元素?

4

3 回答 3

0

可能这应该对你有帮助..

 // this will provide you list of web elements based on class name
 List<WebElement> webElements = driver.findElements(By.className("mainActionPanel"));

然后你必须通过遍历列表找出所需的元素,如下所示。

  WebElement tempElement = null;
  for (WebElement element : webElements) {

            if (element.getAttribute("css").equals("create")) {
                tempElement = element;
            }
        }

完整代码如下,

  List<WebElement> webElements = driver.findElements(By.className("mainActionPanel"));

  WebElement tempElement = null;
  for (WebElement element : webElements) {

            if (element.getAttribute("css").equals("create")) {
                tempElement = element;
            }
  }


  //then you can perform that you want
  tempElement.click();
于 2017-05-29T12:27:21.223 回答
0

尝试使用以下:

 WebElement elem = driver.findElement(By.cssSelector("div.mainActionPanel > a"));
 WebDriverWait wait= new WebDriverWait(driver, 20);

 wait.until(ExpectedConditions.visibilityOf(elem));

 elem.click();
于 2017-05-29T15:48:26.660 回答
0

使用以下命令从 css 搜索更改为 xpath:

xpath = (//a[contains(@href, '#')])[5]

因为它是第 4 个具有 href 属性的“a”元素,其中包含文本“#”。不要找麻烦。

看看这个: http ://www.guru99.com/locators-in-selenium-ide.html

于 2017-05-29T14:18:42.703 回答