web-dev-qa-db-ja.com

Java / seleniumを使用してchromeおよびEdgeで要素をフォーカスできない

chromeでテストを実行し、FFでEdgeを使用すると、要素をフォーカスできません。エラーが表示されます。解決策を投稿しようとしましたが、役に立ちませんでした。 。誰かが助けてくれることを願っています。

driver.findElement(By.linkText("Add")).click();
List <WebElement> groups = new Select(driver.findElement(By.xpath("/html/body/div[1]/section/div/article/form/fieldset/div[3]/div[2]/div/div/div[1]/select"))).getOptions();
groups.get(3).click();
JavascriptExecutor js = (JavascriptExecutor)driver;
WebElement groupRole = driver.findElement(By.xpath("/html/body/div[1]/section/div/article/form/fieldset/div[3]/div[2]/div/div/div[2]/label[2]"));
js.executeScript("arguments[0].click();", groupRole);
driver.findElement(By.xpath("/html/body/div[1]/section/div/article/form/fieldset/div[3]/div[2]/div/div/div[2]/label[2]")).sendKeys(" ");
// Check to see if the user should be made active and set active checkbox to on if value in file is "active"
if (activeFlag.equals("active"))
{
    driver.findElement(By.xpath("/html/body/div[1]/section/div/article/form/fieldset/div[3]/div[1]/div[1]/div/div/input")).sendKeys(" ");
} 
// If the user role is to be admin then set the Site role to Administrator
if (userLevel.equals("admin"))
{
    List <WebElement> roles = new Select(driver.findElement(By.name("community_role"))).getOptions();
    roles.get(1).click();
}

スタックトレースは次のとおりです。

 Exception in thread "main" org.openqa.Selenium.WebDriverException: unknown error: cannot focus element
      (Session info: chrome=47.0.2526.106)
      (Driver info: chromedriver=2.20.353145 (343b531d31eeb933ec778dbcf7081628a1396067),platform=Windows NT 10.0 x86_64) (WARNING: The server did not provide any stacktrace information)
    Command duration or timeout: 81 milliseconds
    Build info: version: '2.48.2', revision: '41bccdd', time: '2015-10-09 19:59:12'
    System info: Host: 'Janet-PC', ip: '192.168.56.1', os.name: 'Windows 8.1', os.Arch: 'x86', os.version: '6.3', Java.version: '1.7.0_80-ea'
    Session ID: 0a9dbd54a81a42a4178b25b95bb14f63
    Driver info: org.openqa.Selenium.chrome.ChromeDriver
    Capabilities [{platform=WIN8_1, acceptSslCerts=true, javascriptEnabled=true, browserName=chrome, chrome={userDataDir=C:\Users\Janet\AppData\Local\Temp\scoped_dir7508_15608}, rotatable=false, locationContextEnabled=true, mobileEmulationEnabled=false, version=47.0.2526.106, takesHeapSnapshot=true, cssSelectorsEnabled=true, databaseEnabled=false, handlesAlerts=true, browserConnectionEnabled=false, webStorageEnabled=true, nativeEvents=true, hasTouchScreen=false, applicationCacheEnabled=false, takesScreenshot=true}]
        at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at Sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at Java.lang.reflect.Constructor.newInstance(Unknown Source)
        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:647)
        at org.openqa.Selenium.remote.RemoteWebElement.execute(RemoteWebElement.Java:326)
        at org.openqa.Selenium.remote.RemoteWebElement.sendKeys(RemoteWebElement.Java:121)
        at Viddler_create_user.createUser.test(createUser.Java:244)
        at Viddler_create_user.createUser.setUpBeforeClass(createUser.Java:126)
        at Viddler_create_user.createUser.main(createUser.Java:64)

別のスタックトレースを次に示します。アクティブなフラグではなく送信ボタンをクリックしようとすると、実際にエラーが発生します。私もすでに提供するアクションのステップを実行していました。

Exception in thread "main" org.openqa.Selenium.WebDriverException: unknown error: cannot focus element
  (Session info: chrome=47.0.2526.106)
  (Driver info: chromedriver=2.20.353145 (343b531d31eeb933ec778dbcf7081628a1396067),platform=Windows NT 10.0 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 52 milliseconds
Build info: version: '2.48.2', revision: '41bccdd', time: '2015-10-09 19:59:12'
System info: Host: 'Janet-PC', ip: '192.168.56.1', os.name: 'Windows 8.1', os.Arch: 'x86', os.version: '6.3', Java.version: '1.7.0_80-ea'
Session ID: f332b496aa54d581c764f7328e770e65
Driver info: org.openqa.Selenium.chrome.ChromeDriver
Capabilities [{platform=WIN8_1, acceptSslCerts=true, javascriptEnabled=true, browserName=chrome, chrome={userDataDir=C:\Users\Janet\AppData\Local\Temp\scoped_dir2072_18936}, rotatable=false, locationContextEnabled=true, mobileEmulationEnabled=false, version=47.0.2526.106, takesHeapSnapshot=true, cssSelectorsEnabled=true, databaseEnabled=false, handlesAlerts=true, browserConnectionEnabled=false, webStorageEnabled=true, nativeEvents=true, hasTouchScreen=false, applicationCacheEnabled=false, takesScreenshot=true}]
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at Java.lang.reflect.Constructor.newInstance(Unknown Source)
    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:647)
    at org.openqa.Selenium.remote.RemoteWebElement.execute(RemoteWebElement.Java:326)
    at org.openqa.Selenium.remote.RemoteWebElement.sendKeys(RemoteWebElement.Java:121)
    at Viddler_create_user.createUser.test(createUser.Java:244)
    at Viddler_create_user.createUser.setUpBeforeClass(createUser.Java:126)
    at Viddler_create_user.createUser.main(createUser.Java:64)

コード:

        Actions actions = new Actions(driver);
        actions.moveToElement(driver.findElement(By.xpath("/html/body/div[1]/section/div/article/form/input[2]")));
        actions.click();
//      actions.sendKeys(" ");
        actions.build().perform();
14
Janet

スタックトレースによると、sendkeysメソッドが問題です。

at org.openqa.Selenium.remote.RemoteWebElement.sendKeys(RemoteWebElement.Java:121)

Actionsクラスを試して、最初に要素に焦点を合わせてから、必要なキーを送信してください。

Actions actions = new Actions(driver);
actions.moveToElement(element);
actions.click();
actions.sendKeys("SOME DATA");
actions.build().perform();
51
parishodak

結局、アクションの解決は機能しました。別の場所に移動したものと重複しているため、コメントアウトされているはずの余分なdriver.findElementBy行があったようです。

ご協力いただきありがとうございます!!

2
Janet

将来の参考のために、他の人がこの問題に遭遇した場合、1つの要素のみを見つけていることを確認してください! Chromeツールは、これに関しては時々欺くことができます。 firePath(firefoxアドオン)でセレクターを再確認したところ、chromeツールで1つの要素が表示されたにもかかわらず、2つの一致するノードがあったことがわかりました。

https://addons.mozilla.org/en-US/firefox/addon/firepath/

2
Valeriya

「アクションクラス」コードを読んでいると、非常に重要なコードが見つかりました。

「アクションクラス」の原因

actions.click()  

?!?

置いてみて

element.click()

element.sendKeys()

既存のコードで。

click()メソッドは要素をフォーカスします!! ~~ THXすべてのシニア

0
소경현

これは、正解を編集したバージョンです。コードをコピーして貼り付けることができなかったためです。以下のコードを使用すると、コピーして貼り付けることができます(要素がidとして見つかった場合):

elem = driver.find_element_by_id("WHATEVER THE ELEMENT ID IS HERE")
actions = ActionChains(driver)
actions.move_to_element(elem)
actions.click()
actions.send_keys("PUT YOUR TEXT IN HERE")
actions.perform()
0
Romano

Xpathである可能性があります。設定した要素レベルまでではありません。例えば。テキストボックスがDiv\div\textareaを通過している場合、ほとんどの場合、Div\部分のみを使用しています。同じ問題が発生し、xpathをtextareaノードまで書き込んだ後に解決しました。

0
Hemant Madan

選択した答えは、私にとって部分的にしか機能しませんでした。追加することにより

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(element));
element.clear();

提案された答えを使用する前に、それは完全に機能しました!

0
Alex