0

アイテムのリストを含むWebページのテストを自動化しようとしています。ユーザー入力項目を選択して削除します。ここでは、VD2を選択して、そのアイテムを削除する必要があります。

<div id="virtual_domains-content">
    <div class="columns">
        <div class="left-column">
            <h2>Virtual Domains</h2>
                <div class="search-row">
                    <div class="box scrolling list-editable">
                        <div id="virtual_domains-list" class="list-view">
                            <div id="virtual_domains-list-11" class="list-item-view">
                                <div class="content"> VD1 </div>
                            </div>
                            <div id="virtual_domains-list-35" class="list-item-view">
                                <div class="content"> VD2 </div>
                            </div>
                        </div>
                    </div>

以下のコードから取得したリストには、最初の要素であるVD1のみが含まれています。2番目の要素はキャプチャされません。誰かが私が問題を解決するのを手伝ってくれますか

List<WebElement> list = webdriver1.findElements(By.xpath("//*[starts-with(@id,'virtual_domains-list-')]"));
for(WebElement option : list){
    System.out.println(option.getText());
    if(option.getText().equals("VD1")) {
        option.click();
        break;
    }
4

4 に答える 4

0

あなたが投稿した上記のコードには、クラス名が含まれています。だから、クラス名を使用しないのはなぜですか。

これが、トリックを実行できる私のサンプルpythonコードです

options=driver.find_element_by_class_name("list-item-view")
     for option in options:
         if(option.text=="VD2")
             option.click()
于 2013-12-27T05:42:22.977 に答える
0

ランダムに生成された ID を扱う場合、xpath 定義でそれらを使用することはお勧めしません。代わりにクラスを使用し、より信頼性の高い xpath を得るためにツリーの一番上から開始する場合は、次のようなことを試してください。

String items = "//div[@id="virtual_domains-content"]/div[@class="columns"]/div[@class="search-row"]/div[@class="box scrolling list-editable"]/div[@class="list-view"]//div[@class="list-item-view"]"

List<WebElement> e = driver.findElements(By.xpath(items));

これにより、すべての VD のリストが取得され、次のようなことができます

String item;
Int listItem = 0;
for(WebElement i : e){
    item = "(//div[@id="virtual_domains-content"]/div[@class="columns"]/div[@class="search-row"]/div[@class="box scrolling list-editable"]/div[@class="list-view"]/div[@class="list-item-view"])[i]" 
    e.get(listItem).findElement(By.xpath(i));
    ...
    ...
}

0 から始まるリスト要素とは対照的に、リスト内の要素は 1 から始まるので、そこにループを開始するために i = 1 を定義することをお勧めします。

于 2013-02-02T20:07:01.563 に答える
0

動的 ID を持つ Web 要素の場合、ID を持つ Xpath を使用する代わりに、「タグ名による」、CSSlocator などの他の方法で要素を見つけることができます。

それでも Xpath を使用したい場合は、Web 要素の動的な名前または ID を以下から取得できます。

driver.findelementsbytagname().

そして、それを Xpath の構築に使用します。

例:

List casereq_table = E.findElementByTagName("table");
tableid1 = tableid.getAttribute("id");
WebElement Certain = E.findElementByXPath("//*[@id='"+tableid1+"']/tbody/tr/td[10]");
certainity = Certain.getText();

ここでは、動的テーブル ID が文字列変数に格納され、Xpath で使用されます。

于 2013-02-04T06:55:34.053 に答える