1

入力の選択からのオプションがクリックされたときにページで何が変わるかを確認する方法を知る必要があります。これは選択入力です:

<select onchange="showCategory('category', 'carextras', 'company_ad', 'err_category');suggestCategory(document.formular.subject.value, this.value, 'subject-warning');" name="category" id="category">

オプションをクリックすると、javascriptは、ユーザーがクリックした内容に応じて異なる入力タイプ(テキスト、選択など)を作成します。どの入力がページに挿入されているかを取得する方法を知る必要があります。誰かが私を助けることができますか?誰かが私に提案を与えることができますか?ありがとう!!!:)

解決済み(悪い方法)、このようにJacekMに感謝します:

WebElement cat =(new WebDriverWait(d, 1))
                .until(new ExpectedCondition<WebElement>(){
                    @Override
                    public WebElement apply(WebDriver d) {
                        return d.findElement(By.id("categoria"));
                    }}); 
        Select allCategory = new Select(cat);
        File f = new File("ebay1.txt");
        PrintWriter pw = new PrintWriter(f);
        pw.write("Categoria\n\t\tSottocategoria\n\t\t\t\tCampi\n");
        List<WebElement> categorie = allCategory.getOptions(); 
        for(int i=1;i<3;i++){
            pw.append(categorie.get(i).getText()+"\n");
            categorie.get(i).click();
            WebElement subcat =(new WebDriverWait(d, 1))
                    .until(new ExpectedCondition<WebElement>(){
                        @Override
                        public WebElement apply(WebDriver d) {
                            return d.findElement(By.id("sottocategoria"));
                        }}); 
            Select allSubCategory = new Select(subcat);
            List<WebElement> sottocategorie = allSubCategory.getOptions();
            sottocategorie.get(0).click();
            for(int j=1;j<sottocategorie.size();j++){
                List<WebElement> before = d.findElements(By.tagName("input"));
                List<WebElement> before_select = d.findElements(By.tagName("select"));
                List<WebElement> before_textarea = d.findElements(By.tagName("textarea"));
                List<String> before_inv = new ArrayList<String>();
                List<String> after_inv = new ArrayList<String>();
                for(WebElement bef : before){
                    if(bef.isDisplayed()){
                        String id = bef.getAttribute("id");
                        List<WebElement> labels = d.findElements(By.tagName("label"));
                        for(WebElement lab : labels){
                            if(lab.getAttribute("for").equals(id)){
                                before_inv.add(lab.getText());
                            }
                        }
                    }
                }
                for(WebElement bef : before_select){
                    if(bef.isDisplayed()){
                        String id = bef.getAttribute("id");
                        List<WebElement> labels = d.findElements(By.tagName("label"));
                        for(WebElement lab : labels){
                            if(lab.getAttribute("for").equals(id)){
                                before_inv.add(lab.getText());
                            }
                        }
                    }
                }
                for(WebElement bef : before_textarea){
                    if(bef.isDisplayed()){
                        String id = bef.getAttribute("id");
                        List<WebElement> labels = d.findElements(By.tagName("label"));
                        for(WebElement lab : labels){
                            if(lab.getAttribute("for").equals(id)){
                                before_inv.add(lab.getText());
                            }
                        }
                    }
                }

                sottocategorie.get(j).click();
                pw.append("\t\t"+sottocategorie.get(j).getText()+"\n");


                List<WebElement> after = d.findElements(By.tagName("input"));
                List<WebElement> after_select = d.findElements(By.tagName("select"));
                List<WebElement> after_textarea = d.findElements(By.tagName("textarea"));
                for(WebElement aft : after){
                    if(aft.isDisplayed()){
                        String id = aft.getAttribute("id");
                        List<WebElement> labels = d.findElements(By.tagName("label"));
                        for(WebElement lab : labels){
                            if(lab.getAttribute("for").equals(id)){
                                after_inv.add(lab.getText());
                            }
                        }
                    }
                }
                for(WebElement aft : after_select){
                    if(aft.isDisplayed()){
                        String id = aft.getAttribute("id");
                        List<WebElement> labels = d.findElements(By.tagName("label"));
                        for(WebElement lab : labels){
                            if(lab.getAttribute("for").equals(id)){
                                after_inv.add(lab.getText());
                            }
                        }
                    }
                }
                for(WebElement aft : after_textarea){
                    if(aft.isDisplayed()){
                        String id = aft.getAttribute("id");
                        List<WebElement> labels = d.findElements(By.tagName("label"));
                        for(WebElement lab : labels){
                            if(lab.getAttribute("for").equals(id)){
                                after_inv.add(lab.getText());
                            }
                        }
                    }
                }
                List<String> finale = new ArrayList<String>();
                for(String fin : after_inv){
                    if(!before_inv.contains(fin)){
                        finale.add(fin);
                    }
                }
                for(String fin:finale){
                    pw.append("\t\t\t\t"+fin.replace(":", "")+"\n");
                }
                sottocategorie.get(0).click();
            }
        }

        pw.close();
4

1 に答える 1

1

あなたが提供したページを一見すると、すべての要素がページに存在しているように見えますが、style="display:none" を使用して非表示になっているだけです。したがって、要素のスタイルまたは可視性を確認できます。

String style = element.getAttribute("style");
boolean visible = element.isDisplayed();

すべての要素を手動で指定するのが難しすぎる場合は、試してみてください

List<WebElement> elements = driver.findElement(By.xpath("//some/xpath")).findElements(By.xpath(".//*"));

//some/xpath の下にあるすべての要素を取得し、ループ内で上記のメソッドを呼び出します。ブール値のみを格納する同じサイズのリストを作成できます- element.isDisplayed() メソッドで取得した結果。次に、ブール値を要素の現在の状態と比較して、どの要素が変更されたかを確認できます。

また、すべての非表示要素を配列に格納し、ページ上の何かをクリックするたびに、それらを繰り返し処理して、どの要素が変更されたかを確認することもできます。

List<WebElement> elements = driver.findElement(By.xpath("//some/xpath")).findElements(By.xpath(".//*"));
List<WebElement> invisibles = new ArrayList<WebElement>();

for (WebElement elem : elements)
{
   if (!elem.isDisplayed())
   {
      invisibles.add(elem)
   }
}

//...

for (WebElement elem : invisibles)
{
   if (elem.isDisplayed())
   {
      //element has appeared
   }
}

このソリューションの問題点は、ページに表示される要素のみを処理し、消える要素を処理しないことです。

于 2012-05-18T15:20:16.350 に答える