2016-10-10 152 views
0

我是该网站的新手。我试图选择/点击http://autotask.net上的元素。我曾尝试使用以下的方法来找到元素:接收selenium.common.exceptions.NoSuchElementException:消息:无法定位元素消息

driver.find_element_by_css_selector( '#HREF_btnPrint> IMG:第n个孩子(1)') driver.find_element_by_xpath( 'browser.find_element_by_xpath('/ HTML /体/形式[1]/DIV [2]/DIV [1]/UL /李[2]/A/IMG')

...但它给我的标题除外。

我能找到元素罚款在登录页面(即'用户名''密码'字段),但一旦我登录 - 硒在页面上找不到任何元素。

我一直在学习/编码一个fe现在w周,我对Java一无所知。如果您需要更多信息,请让我知道 - 谢谢。

回答

0

我不确定python的语法,所以我会用Java代替。我认为有两种可能的情况,首先你的驱动程序在页面加载时查看DOM结构。另一个是网络驱动程序没有指向DOM的根源。我通常有等待方法等待页面加载完成,并在查找某些元素之前切换到默认内容。

首先,我通过构造函数传递WebDriver,Element id和Element名称。然后我有waitUntilReady()执行逻辑来检查特定超时内元素的存在。

public void waitUntilReady() { 
      WebDriverWait waiter = new WebDriverWait(getWebDriver(), 30); 
      waiter.withMessage("\"" + getElementName() + "\" is not ready in 30 seconds") 
        .until(new Predicate<WebDriver>() { 
         @Override 
         public boolean apply(WebDriver input) { 
          /* isReady() returns true if all elements 
          * that you need to test are available. 
          * Note that if you have javascript, you 
          * should have some hidden field to tell 
          * you that the whole page has loaded. */ 
          return isReady(); 
         } 
        }); 
     } 

以及开关默认内容之前找到元素

WebElement getWebElement() { 
    WebElement webElement; 
    try { 
     getWebDriver().switchTo().defaultContent(); 
     webElement = getWebDriver().findElement(By.id(elementId)); 
    } catch (NoSuchElementException ex) { 
     getLogger().log(Level.SEVERE, "Element id '" + elementId + "' does not exist"); 
     throw ex; 
    } 
    return webElement; 
} 

如果它不工作,你可以有<body id="container">,然后用driver.findElementById( “容器”)。findElementById( “你的目标元素”)

+0

我对Java并不熟悉。我用得到你正在说的,然后找到元素byid方法。我需要python语法来查找元素中的元素。 – MrGlass