2017-03-09 6 views
0

Webページの要素をクリックすると、ユーザーがクリックして入力して金額を入力できるコードセクションが作成されます。しかし、私がSeleniumでこれを自動化しようとしているとき、私はこれらの新しい要素にアクセスすることができません。私は単純に行う場合:Javascriptで生成されたフィールドをクリックするには、JavaのSeleniumを使用してください。

driver.findElements(By.cssSelector("id^=field")); 

それは、この例外がスローされます。

Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: Cannot set property 'name' of undefined 

私は新しく生成されたHTMLがあると私はどのidを、私は思います見ることができる要素をクリックした後pageSourceを見れば検索する必要があります。どんな助けでも大変に感謝します。

EDIT:

コードを見つけるとJavaScriptを活性化させる要素をクリックするために使用:

List<WebElement> buttons = element.findElements(By.cssSelector("[id^=fieldButtons]")); 
for (WebElement element : buttons) { 
    element.click(); 
    // Here is where I want to then access the field and enter data. 
} 

は、ここで使用した場合、完全なスタックトレースです:あなたはに

new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.cssSelector("id^=field"))); 


Starting ChromeDriver 2.27.440175 (9bc1d90b8bfa4dd181fbbf769a5eb5e575574320) on port 18209 
Only local connections are allowed. 
Mar 10, 2017 7:13:26 AM org.openqa.selenium.support.ui.ExpectedConditions findElement 
WARNING: WebDriverException thrown by findElement(By.cssSelector: id^=field) 
org.openqa.selenium.WebDriverException: unknown error: Cannot set property 'name' of undefined 
(Session info: chrome=56.0.2924.87) 
(Driver info: chromedriver=2.27.440175 (9bc1d90b8bfa4dd181fbbf769a5eb5e575574320),platform=Linux 4.4.8-040408-generic x86_64) (WARNING: The server did not provide any stacktrace information) 
Command duration or timeout: 35 milliseconds 
Driver info: org.openqa.selenium.chrome.ChromeDriver 
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.27.440175 (9bc1d90b8bfa4dd181fbbf769a5eb5e575574320), userDataDir=/tmp/.org.chromium.Chromium.89aRVC}, takesHeapSnapshot=true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=56.0.2924.87, platform=LINUX, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true, unexpectedAlertBehaviour=}] 
Session ID: 75f1b0b4a60c26c1d9ec0bac0e4fa0e4 
*** Element info: {Using=css selector, value=id^=field} 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206) 
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158) 
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678) 
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:363) 
at org.openqa.selenium.remote.RemoteWebDriver.findElementByCssSelector(RemoteWebDriver.java:492) 
at org.openqa.selenium.By$ByCssSelector.findElement(By.java:430) 
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:355) 
at org.openqa.selenium.support.ui.ExpectedConditions.findElement(ExpectedConditions.java:899) 
at org.openqa.selenium.support.ui.ExpectedConditions.access$000(ExpectedConditions.java:41) 
at org.openqa.selenium.support.ui.ExpectedConditions$7.apply(ExpectedConditions.java:205) 
at org.openqa.selenium.support.ui.ExpectedConditions$7.apply(ExpectedConditions.java:201) 
at org.openqa.selenium.support.ui.ExpectedConditions$22.apply(ExpectedConditions.java:653) 
at org.openqa.selenium.support.ui.ExpectedConditions$22.apply(ExpectedConditions.java:646) 
at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:238) 
at webScrape.findFieldToFill(webScrape.java:215) 
at webScrape.<init>(webScrape.java:26) 
at Main.main(Main.java:6) 
+0

のような例を何かのために私は、コードを追加しました要素を見つけるために使用され、私は他の場所のようなcssSelectorを使用していますが、うまくいくようです。 –

+1

JavaScriptを有効にしてから要素を探すまでに5秒間の暗黙的な待機を追加しようとしましたか?私は通常WebDriverWaitで要素の検索を設定しますが、私はそれをあなたの上では見ません。 – mutt

+0

ええ、私はそれがページ上の要素を見つけることができないときに私は別の例外を持っていたので、それを見つけることができると思う。これは異なっているようですが、私は何かを初期化する必要があります。私はSeleniumを使ってJavascriptを実行してみましたが、それを得ることはできませんでした。 –

答えて

0

を試してみましたJavascriptExecutorを使用して金額を入力し、ユーザーのクリックを実行します。私にとっては、私は成功しdriver.clickを使用して値をクリックするか、入力しなかった場合、それは(助け)またはdriver.sendKeys()

この

List<WebElement> buttons = element.findElements(By.cssSelector("[id^=fieldButtons]")); 
    for (WebElement element : buttons) { 
     element.click(); 
     Thread.sleep(2000) //sometimes I use thread sleep for simple wait condition 
     ((JavascriptExecutor) driver).executeScript("document.getElementById(\"field\").setAttribute('amount','" + amount + "');"); 
     ((JavascriptExecutor) driver).executeScript("document.getElementById(\"button\").click();"); 
    } 
関連する問題