2016-11-24 5 views
0

私はテーブルに配置した要素の値を編集しようとしています this pageです。私はこのコードを使用してい :セレンでテーブルの要素を編集するには?

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
    driver.get("http://samples.gwtproject.org/samples/Showcase/Showcase.html#!CwCellTable"); 

    WebElement firstName = driver.findElement(By.xpath("//*[@id=\"gwt-debug-contentPanel\"]/div[2]/div/div[2]/div/div[3]/div/div/div/table/tbody/tr[1]/td/table/tbody[1]/tr[1]/td[2]/div")); 

    firstName.click(); 
    firstName.clear(); 
    firstName.sendKeys("test"); 

をそれは言う: 「Elementはそれをクリアするために、ユーザが編集可能でなければなりません。」 この要素はどのように編集できますか? また、このページの「カテゴリ」フィールドに問題があります。私はそれらのそれぞれを連続して選択しようとしています。これを行うには

WebElement category = driver.findElement(By.xpath("//*[@id=\"gwt-debug-contentPanel\"]/div[2]/div/div[2]/div/div[3]/div/div/div/table/tbody/tr[1]/td/table/tbody[1]/tr[1]/td[4]/div/select")); 

     category.sendKeys("Businesses"); 
     category.sendKeys("Friends"); 
     category.sendKeys("Coworkers"); 
     category.sendKeys("Businesses"); 
     category.sendKeys("Family"); 

私はcategory.sendKeys("");を1回試してみましたが、うまくいきました。 しかし、これをスローします。「古い要素参照:要素がページ文書に添付されていません。どのように私はこの要素を1つずつ変えることができますか?

答えて

1

これはちょっと変なものです。 DOMは変化し続けるので、何が起こっているのかを見るのが難しくなります。そうすれば、正しいことを働かせることができます。 DOMを変更する要素を1つクリックして、.sendKeys()に必要なINPUTを挿入する必要があります。私は下のコードをテストし、それが動作します。

私はこのようなもののための関数を作成して再利用できるようにしたいと思います。この関数はファーストネームを変更します。 rowIndexは変更したいテーブルの行で、firstNameは希望するファーストネームです。テーブルがロードされた後に動的にロードされるため、テーブルのロードが完了するのを待たなければなりません。

public static void setFirstName(int rowIndex, String firstName) 
{ 
    WebElement firstNameElement = new WebDriverWait(driver, 10) 
      .until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("tr[__gwt_row='" + rowIndex + "'] > td > div"))) 
      .get(1); 
    firstNameElement.click(); 
    firstNameElement.findElement(By.tagName("input")).sendKeys(firstName + "\n"); 
} 

「姓は」あなたは、のような

setFirstName(0, "FirstName"); 
+0

おかげでそれを呼ぶだろうし!最初の行の最初の名前を変更するにはそれは今働く。あなたは "カテゴリ"フィールドの要素を変更することで私を助けることができますか? –

+0

あなたもできる場合は、私は姓を変更する必要があるようなCSSセレクターのようになります教えてください –

+0

あなたがこの答えが有用であることがわかったら、それをupvoteしてください。あなたの質問に答えた場合は、それを合格とマークしてください。これで例を得たので、それを調べ、それがどのように動作して他の列に適用できるかを理解するまでに時間をかけてください。あなたが試してみることができない場合は、あなたが新しい質問で試したものを投稿し、私または他の人があなたを助けようとします。 – JeffC

関連する問題