无法点击标签的子值,导致“元素”不可见' Selenium中的例外情况

时间:2016-08-19 09:44:06

标签: java selenium selenium-webdriver webdriver

尝试点击电子商务演示网站'在“DEMO SITES'选项卡' http://toolsqa.com/'网站使用下面提到的方式。但无法点击它。请帮我解决这个问题。

代码1:

 WebDriverWait wait = new WebDriverWait(driver, 10);
  wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.linkText("E-Commerce Demo Site"))));
  driver.findElement(By.linkText("E-Commerce Demo Site")).click();

代码2:

driver.findElement(By.cssSelector("#main-nav > li.menu-item.menu-item-type-custom.menu-item-object-custom.menu-item-has-children.menu-item-17611.dt-mega-menu.mega-auto-width.mega-column-1.has-children > ul > li.menu-item.menu-item-type-custom.menu-item-object-custom.menu-item-21575.dt-mega-parent.wf-1.first.level-arrows-on")).click();

CODE3:

WebElement subNav = driver.findElement(By.className("sub-nav"));
List < WebElement > subNavValues = subNav.findElements(By.tagName("li"));

subNavValues.get(0).click();

5 个答案:

答案 0 :(得分:2)

     Actions ac;
 ac = new Actions(dr);
ac.MoveToElement(dr.FindElement(By.LinkText("DEMOSITES"))).Perform();

然后使用以下任何xpath点击子菜单:

1。“// span [包含(text(),'电子商务演示网站')]”

2。 “//一个[@href = 'http://store.demoqa.com']”

dr.findelement(By.xpath(xpath)).click();

答案 1 :(得分:1)

  1. 您需要转移到&#34;演示网站&#34;跨度。您必须使用Actions类使用函数moveToElement()移动到此元素。对于元素搜索带有文本&#34; DEMO SITES&#34;的跨度。

  2. 等待显示子菜单。使用webdriver等待元素ul与class =&#39; sub-nav&#39;。 new WebDriverWait(driver, 3).until(ExpectedConditions.visibilityOf(sub-menu webelement)).

  3. 然后点击电子商务演示网站&#39;链接。这与文本有关。

  4. 你可以找出确切的语法。

答案 2 :(得分:1)

在窗口最大化之后尝试以下内容

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
WebElement elem = driver.findElement(By.xpath("//nav[@id='navigation']/ul/li[9]/a/span"));
Actions action = new Actions(driver);
action.moveToElement(elem).build().perform();

这对我有用。

答案 3 :(得分:1)

尝试这样的事情对我来说很好:

@Test
public void qaToolsNavigation() {
    Actions action = new Actions(driver);
    By demoSitesMenuItem = By.xpath("//span[text()='DEMO SITES']");
    By eCommerceSubMenuItem = By.xpath("(//span[text()='E-Commerce Demo Site']/..)[1]");
    driver.get("http://toolsqa.com/");
    waitForVisibility(demoSitesMenuItem, 10);
    action.moveToElement(driver.findElement(demoSitesMenuItem)).build().perform();
    waitForVisibility(eCommerceSubMenuItem, 10);
    driver.findElement(eCommerceSubMenuItem).click();
}

private void waitForVisibility(By locator, int timeToWait) {
    WebDriverWait wait = new WebDriverWait(driver, timeToWait);
    wait.until(ExpectedConditions.visibilityOfElementLocated(locator));
}

答案 4 :(得分:0)

你可以尝试这个:     driver.findElement(By.xpath(&#34; // * // span [contains(text(),&#39;电子商务演示 站点&#39)]&#34;))点击();