2013-06-27 50 views
0

我使用硒在表單上提交數據。該網站最近更新了它的表格,現在硒在變化之前找不到它能夠找到的字段。Selenium無法找到特定字段

我提交的數據:http://bit.ly/ioKvAL

這裏是我有:

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 
//import org.openqa.selenium.chrome.ChromeDriver; 
//import org.openqa.selenium.htmlunit.HtmlUnitDriver; 
import java.util.List; 

public class TwTest { 

    public static void main(String[] args) 
    { 
     WebDriver driver = new FirefoxDriver(); 
     driver.get("SEE bit.ly LINK ABOVE"); 

     WebElement radio = driver.findElement(By.id("represent")); 

     radio.click(); 

     WebElement box1 = driver.findElement(By.id("inf_tweet_button")); 
     box1.click(); 

     WebElement radio1 = driver.findElement(By.id("tweet_website")); 

     radio1.click(); 

     List<WebElement> radioOptions = driver.findElements(By.id("tweet_website_direct_1")); 

     for(WebElement radioSelect : radioOptions) 
     { 
      if(radioSelect.getAttribute("value").equals("0")) 
      { 
       radioSelect.click(); 
       System.out.println(radioSelect.getAttribute("value")); 
      } 

     } 

     WebElement more = driver.findElement(By.id("more_tweet_link")); 
     more.click(); 

     WebElement acc2 = driver.findElement(By.id("tweet_url_2")); 

     acc2.sendKeys("test"); 
    } 
} 

上述結果是

0 
Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"id","selector":"tweet_url_2"} 
Command duration or timeout: 30 milliseconds 
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html 
Build info: version: '2.32.0', revision: '6c40c18', time: '2013-04-09 17:23:22' 
System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_09' 
Session ID: b0bea70f-7a0d-4a22-a951-864c0f6fe9ed 
Driver info: org.openqa.selenium.firefox.FirefoxDriver 
Capabilities [{platform=XP, databaseEnabled=true, cssSelectorsEnabled=true, javascriptEnabled=true, acceptSslCerts=true, handlesAlerts=true, browserName=firefox, browserConnectionEnabled=true, nativeEvents=true, webStorageEnabled=true, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=22.0}] 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:187) 
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145) 
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554) 
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:307) 
    at org.openqa.selenium.remote.RemoteWebDriver.findElementById(RemoteWebDriver.java:348) 
    at org.openqa.selenium.By$ById.findElement(By.java:216) 
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:299) 
    at TwTest.main(TwTest.java:43) 
Caused by: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: Unable to locate element: {"method":"id","selector":"tweet_url_2"} 
Build info: version: '2.32.0', revision: '6c40c18', time: '2013-04-09 17:23:22' 
System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_09' 
Driver info: driver.version: unknown 
    at <anonymous class>.FirefoxDriver.prototype.findElementInternal_(file:///C:/Users/USERCOMP/AppData/Local/Temp/anonymous2932086114655114107webdriver-profile/extensions/[email protected]/components/driver_component.js:8405) 
    at <anonymous class>.FirefoxDriver.prototype.findElement(file:///C:/Users/USERCOMP/AppData/Local/Temp/anonymous2932086114655114107webdriver-profile/extensions/[email protected]/components/driver_component.js:8414) 
    at <anonymous class>.DelayedCommand.prototype.executeInternal_/h(file:///C:/Users/USERCOMP/AppData/Local/Temp/anonymous2932086114655114107webdriver-profile/extensions/[email protected]/components/command_processor.js:10421) 
    at <anonymous class>.DelayedCommand.prototype.executeInternal_(file:///C:/Users/USERCOMP/AppData/Local/Temp/anonymous2932086114655114107webdriver-profile/extensions/[email protected]/components/command_processor.js:10426) 
    at <anonymous class>.DelayedCommand.prototype.execute/<(file:///C:/Users/USERCOMP/AppData/Local/Temp/anonymous2932086114655114107webdriver-profile/extensions/[email protected]/components/command_processor.js:10366) 
+0

你是否實施了「等待」? – Amey

+0

不,我不知道。這會解決問題嗎? –

+1

我會想象,是的。當你點擊'WebElement more = driver.findElement(By.id(「more_tweet_link」)); more.click(); WebElement acc2 = driver.findElement(By.id(「tweet_url_2」));'wait for'tweet_url_2' – Amey

回答

1

您需要實現waitfluentwait。點擊

WebElement more = driver.findElement(By.id("more_tweet_link")); 
more.click(); 

的webdriver的嘗試與webelement(.id("tweet_url_2"))即時互動後(查看錯誤信息)

Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"id","selector":"tweet_url_2"} 
Command duration or timeout: 30 milliseconds # Fails in 30 milliseconds 

失敗的原因是,該webelement .id("tweet_url_2")不存在,直到more_tweet_link是點擊。